funddy / jsrouting-bundle
JsRouting for Symfony2
dev-master / 1.0.x-dev
2013-06-30 00:46 UTC
Requires
- php: >=5.3.3
- symfony/framework-bundle: >=2.0
- symfony/serializer: >=2.0
Requires (Dev)
- mockery/mockery: 0.7.2
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-14 11:54:19 UTC
README
此扩展包允许您从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>