Symfony2 通过命令行调用控制器

Posted 一望无际的代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,就是自己写一个类,然后应用

参考资料

    

      

以上是关于Symfony2 通过命令行调用控制器的主要内容,如果未能解决你的问题,请参考以下文章

sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li

如何创建将在 Symfony2 中过期/销毁会话的命令控制台?

Symfony2 生成带有选项的实体字段

Symfony2 在 AJAX 调用中返回空 JSON,而变量不为空

Symfony2 将哈希片段参数附加到分页 URL

Symfony2 - 如何在自定义控制台命令中访问服务?