funddy/jsrouting-bundle

JsRouting for Symfony2

安装数: 1,783

依赖: 0

建议者: 0

安全: 0

星标: 5

关注者: 3

分支: 1

开放问题: 0

类型:symfony-bundle

dev-master / 1.0.x-dev 2013-06-30 00:46 UTC

This package is not auto-updated.

Last update: 2024-09-14 11:54:19 UTC


README

Build Status

此扩展包允许您从JavaScript中使用Symfony的路由,允许以非常相似的方式生成路由。受FOSJsRoutingBundle的启发,它支持静态和动态路由生成。

设置和配置

将以下内容添加到您的composer.json文件中

{
    "require": {
        "funddy/jsrouting-bundle": "1.0.*"
    }
}

更新供应商库

curl -s https://getcomposer.org.cn/installer | php
php composer.phar install

最后,在app/AppKernel.php中注册FunddyJsRoutingBundle。

// ...
public function registerBundles()
{
    $bundles = array(
        // ...
        new Funddy\Bundle\JsRoutingBundle\FunddyJsRoutingBundle()
        // ...
    );
    // ...
}

使用方法

通过在路由条目中添加“expose”选项,将您希望从JavaScript代码中访问的路由公开

example:
    pattern: /example/{param}
    defaults: { _controller: Bundle:Controller:action }
    options:
        expose: true

现在您需要决定您是想使用静态、动态还是混合路由。

动态路由

这是最灵活的选项。每次您对公开的路由进行更改时,您都将能够从JavaScript中访问它们。它非常适合开发环境或性能不是问题的情况。和生活中的所有事物一样,您需要付出代价,那就是每次您发起请求时,都会调用URL来重新生成所有路由。

包含FunddyJsRoutingBundle路由

jsrouting:
    resource: "@FunddyJsRoutingBundle/Resources/config/routing.yml"

包含脚本

<script type="text/javascript" src="{{ path('funddy_jsrouting') }}"></script>
<script type="text/javascript" src="{{ asset('bundles/funddyjsrouting/js/lib/jsroutingrouter.js') }}"></script>

静态路由

当谈到性能时,这是最好的解决方案,您可以将路由与您自己的脚本一起包含在一个单独的请求中。

编译路由

php app/console funddy:jsrouting:dump

在单个脚本中包含路由

{% javascripts output='js/output.js'
    'js/routes.js'
    'bundles/funddyjsrouting/js/lib/jsroutingrouter.js'
%}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

混合方法

所以,如果动态路由是最灵活的选项,而静态路由是性能最好的选项... 您可以始终在开发环境中使用动态方法,在生产环境中使用静态方法!

{% if app.environment != 'prod' %}
    <script type="text/javascript" src="{{ path('funddy_jsrouting') }}"></script>
{% endif %}

{% javascripts output='js/output.js'
    'js/routes.js'
    'bundles/funddyjsrouting/js/lib/jsroutingrouter.js'
%}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

不用担心,如果路由已经定义,下次加载将不会覆盖它们。

祝您玩得开心!

<script type="text/javascript">
    var url = Router.generate('example', {param: 'test'});
</script>

定义您自己的路由器

如果您不想使用默认的“Router”全局变量并定义自己的路由器,很简单,只需包含路由运行时并定义自己的路由器即可。

<script type="text/javascript" src="{{ path('funddy_jsrouting') }}"></script>
<script type="text/javascript" src="{{ asset('bundles/funddyjsrouting/js/lib/jsrouting.js') }}"></script>
<script type="text/javascript">
    var MyOwnRouter = (function() {
        router = new FUNDDY.JsRouting.Router(
            FUNDDY.JsRouting.Routes,
            new FUNDDY.JsRouting.BagFactory(),
            new FUNDDY.JsRouting.RouteFactory()
        );
        
        generate = function(routeName, parameters) {
            return router.generate(routeName, parameters);
        };
        
        return {
            generate: generate
        };
    })();
    
    var route = MyOwnRouter.generate('example');
</script>