一望无际的代码

我有酒,你有bug吗?

导航

Symfony2 通过命令行调用控制器

  由于系统需求,需要写一个无限循环的控制器,那么既然有一个无限循环的控制器,那么就需要有一个开关,不可能直接通过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,就是自己写一个类,然后应用

参考资料

    

      

posted on 2016-03-04 17:35  一望无际的代码  阅读(507)  评论(0编辑  收藏  举报