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,就是自己写一个类,然后应用

参考资料

    

      

时间: 2024-08-08 13:41:46

Symfony2 通过命令行调用控制器的相关文章

Maven-11: 从命令行调用插件

mvn -h显示mvn命令帮助: usage: mvn [options] [<goal(s)>] [<phase(s)>] Options: -am,--also-make If project list is specified, also build projects required by the list -amd,--also-make-dependents If project list is specified, also build projects that d

wget 可命令行调用的下载工具

可命令行调用的下载工具,有linux与windows版本. Wget [options] [url] -N,–timestamping只下载比本地新的文件 -t , 若下载失败的尝试次数 -P,  --directory-prefix=PREFIX  save files to PREFIX/... D:\Program Files\GnuWin32\bin>wget -P d:\yichu\ http://182.92.227.112/download/schtaskfile.zip 表示要下

VB6 实现命令行调用时附着到原控制台

Public Declare Function AttachConsole Lib "kernel32.dll" (ByVal ProcessID As Integer) As Boolean 一个参数,就是进程ID.要实现附着,必须得提供其进程ID,那么就需要经过非常复杂的过程.那么,现在请大家再次鄙视下微软,因为这个 API 函数还留有另外一个常量:ATTACH_PARENT_PROCESS(十进制值:-1),能够实现直接附着到父进程(即调用程序的进程上). 那么,现在对上例教程的

Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入库,需要带main()主函数: 情况2:向程序传参数,并且程序没有使用第三方jar包 这种情形下打包和情况1是一样的 情况3:程序使用了第三方jar包 这种情况下的打包要复杂一些,需要把第三方jar包一起导出,可以使用eclipse的插件fat jar,很简便,但是fat jar只支持eclipse

popen调用与命令行调用不一致的问题

linux但是命令行非常强大,所以很挫工作都拿popen调用系统函数来操作. 可是有次ps aux|grep 进程的时候却总是失败,换成ps ax却时好时坏,写个脚本来ps,打印输出,然后程序调用脚本,也是一样情况.但是自己在命令行尝试,感觉在逻辑上没有问题啊. 最后发现是程序或者脚本里面调用命令,ps出来的每一行都被截断了.增加参数--columns 200后解决.

通过C#命令行调用inkscape画PNG图片

一直关注博客园,但是自己总不去写点东西.慢慢的发现自己看的能力也没提高,动手能力越来越菜.是时候动动手了.首次写博文,开始记录工作中用到的一写东西,希望再次回过头来看的时候,能对自己有些帮助,也对看到这些的人有些帮助.开始了!Inkscape常用命令行,复制粘贴过来了. -?, --help              -V, --version -f, --file=FILENAME -e, --export-png=FILENAME -a, --export-area=x0:y0:x1:y1

mac xampp命令行调用mysql

参考 http://www.cnblogs.com/machao/p/6206483.html 直接mysql不行,显示command not found 调用 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ffffff; background-color: #2b66c9 } span.s1 { } sudo ln -s /applications/xampp/bin/mysql /usr/bin 又显示

scrapy, 自带命令行调用工具.

#-*- coding:utf-8 -*- from scrapy import cmdline cmdline.execute("scrapy crawl dmoz".split())

[Symfony2] 在命令或控制器里跑另一个命令的N种方法

或许最容易想到的,是通过system或者exec里执行命令,只不过这么做显得太过粗线条对吧——系统调用函数系列不一定主机提供商允许运行,而且运行命令得重新初始化Symfony2框架运行环境,多浪费计算资源. 这两个问题,最需要解决的是第一个问题.为了安全性,很多环境PHP的系统调用系列函数都被disable掉了.不过这个问题也应该好解决,我们来看看app/console文件到底执行了什么就明白了. 1 2 3 4 5 6 7 8 9 10 11 12 // app/console ... use