由于系统需求,需要写一个无限循环的控制器,那么既然有一个无限循环的控制器,那么就需要有一个开关,不可能直接通过route来开启吧。当然要使用高级一点的方法啊。
那就是使用控制台通过命令行(command line)来开启。
有了这个想法,那么我们就要开始着手了。下面介绍我找到的两种方法
方法1:
phax-bundle,这个可以帮助我们通过command line 来请求controller或者web client
step1:安装bundle
composer require phax/phax-bundle
step2:
在compser.json中引用
{ "require": { "phax/phax-bundle": "dev-master" } }
step3:
注册phax-bundle
// app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Phax\CoreBundle\PhaxCoreBundle(), ); }
step4:
注册phax路由
#app/routing.yml phax: resource: "@PhaxCoreBundle/Resources/config/routing.yml"
(可选)step5:
如果你要通过客户端ajax调用controller,就要在模板加上一下代码
{# Phax integration #} {% javascripts '@PhaxCoreBundle/Resources/public/js/*' %} <script src="{{ asset_url }}" type="text/javascript"></script> {% endjavascripts %} <script type="text/javascript"> var phaxConfig = { www_script: '{{ path('phax_script') }}' } </script> {# END Phax integration #}
检查是否安装phax是否安装成功
php app/console phax:action help
phax安装完成以后,下面就是使用了。
step1:
创建一个phax controller
php app\console generate:bundle
创建完成后
<?php // Acme\CommentBundle\Controller\CommentAjaxController.php namespace Acme\CommentBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Phax\CoreBundle\Model\PhaxAction; // 记得应用这个 class CommentAjaxController extends Controller { /** * Add a comment asynchronously */ public function addAction(PhaxAction $phaxAction) {
echo $msg = $phaxAction->get('msg', 'i'm message'); //后面设置的是默认值
}
}
step2:把你的控制器注册成一个服务
# src/Acme/CommentBundle/Resources/service.yml services: phax.comment: class: Acme\CommentBundle\Controller\CommentAjaxController calls: - [setContainer, ["@service_container"]]
step3:通过命令行调用
example:
php app/console phax:action comment add -p msg:'hello world'
#说明:php app/console phax:action controller action -p param1:value1 -p param2:value2
输出的内容是:hello world;
方法2:不用安装bundle,就是自己写一个类,然后应用