文档章节

如何定义command作为服务

汤汤圆圆
 汤汤圆圆
发布于 2015/12/15 23:27
字数 307
阅读 38
收藏 1

默认symfony把每个Bundle下的Command中的程序注册为命令,如果该程序继承了ContainerAwareCommand类则symfony自动注入服务容器;这样有一些局限性

*. 你的命令必须放在Command目录下

*. 没有办法基于你的环境注册服务或利用一些依赖

*. 在configure()方法中不能访问服务容器(因为setContainer()还没有被调用)

*. 你不能使用同一类创建多个命令(根据不同的配置)

解决这些问题,你就需要把你的命令注册为一个服务;tag为console.command

services:
    app.command.my_command:
        class: AppBundle\Command\MyCommand
        tags:
            -  { name: console.command }

###使用依赖和参数给命令选项设置默认值

// src/AppBundle/Command/GreetCommand.php
namespace AppBundle\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class GreetCommand extends Command
{
    protected $defaultName;

    public function __construct($defaultName)
    {
        $this->defaultName = $defaultName;

        parent::__construct();
    }

    protected function configure()
    {
        // try to avoid work here (e.g. database query)
        // this method is *always* called - see warning below
        $defaultName = $this->defaultName;

        $this
            ->setName('demo:greet')
            ->setDescription('Greet someone')
            ->addOption(
                'name',
                '-n',
                InputOption::VALUE_REQUIRED,
                'Who do you want to greet?',
                $defaultName
            )
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $name = $input->getOption('name');

        $output->writeln($name);
    }
}

#配置注入参数到命令
parameters:
    command.default_name: Javier

services:
    app.command.my_command:
        class: AppBundle\Command\MyCommand
        arguments: ["%command.default_name%"]
        tags:
            -  { name: console.command }

© 著作权归作者所有

汤汤圆圆

汤汤圆圆

粉丝 11
博文 82
码字总数 26104
作品 0
昌平
程序员
私信 提问
如何让django方法自动地定期执行

实现思路: 1.首先把需要自动执行的django method写成django command 2.将自己定义的django command添加到cron中使用cron服务实现定期执行 Part1 在django工程中添加自定义的django command ...

vincent_y
2013/11/19
3.3K
2
Domino 服务器定时重启

Domino 服务器定时重启 作为一个企业管理员来说,保证服务的正常运行是必不可少的技能,我们都知道Windows系统长期不重启会有很多资源被占用,长期不重启会导致程序运行缓慢,所以需要定时重...

高文龙
2017/10/07
0
0
Nagios 的扩展插件 —— NRPE的安装配置

NRPE是nagios的一个扩展,它被用于被监控的服务器上,向nagios监控平台提供该服务器的一些本地的情况。例如,cpu负载、内存使用、硬盘使用等等。NRPE可以称为nagios的for linux 客户端。 为 ...

鉴客
2010/08/24
1K
1
监控之--使用NPRE监控Linux主机

作为Nagios的一个扩展功能插件,NRPE可在远程的linux主机上执行的插件程序。远程的liux服务器通过安装NRPE及Nagios的相关插件程序可以向Nagios服务端监控平台提供自身的情况例如:CPU负载,内...

CARYFLASH
2017/11/10
0
0
Kubernetes集群健康检查最佳实践

本篇是Google Developer Advocate Sandeep Dinesh关于如何充分利用Kubernetes环境的七部分视频和博客系列的第三部分。 第一篇:如何构建尽可能小的容器镜像? 第二篇:如何使用命名空间管理K...

Docker
2018/08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS3 : transition 属性

本文转载于:专业的前端网站➧CSS3 : transition 属性 CSS3的 transition 属性用于状态过度效果! 1、语法: 1 transition: property duration timing-function delay;2 -moz-transition: ...

前端老手
13分钟前
3
0
一个简单的加密工具,性能貌似不行,待优化

一个简单的加密工具,性能貌似不行,待优化 package com.kxvz.common.crypt;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import java.i......

Kxvz
15分钟前
2
0
vue实现路由懒加载

一、为什么要实现懒加载 减少首屏加载时间,避免白屏 二、常用的懒加载方式有两种:即使用vue异步组件 和 ES中的import a、vue异步加载: import Vue from 'vue' import Router from 'vue-ro...

Bing309
18分钟前
5
0
axios拦截器

axios.interceptors.response.use(response => { if (response.data.code == 0) { return response.data } else if (response.data.code == 600) { Cookies.remove('Admin-Token') router.pu......

Cyoya
20分钟前
5
0
给大家分享下部署云桌面的几个小技巧

从去年4月份开始我们公司就开始使用云桌面来进行上网办公的,在这一年多的使用过程中并没有出现像网上和有些用户说的那样,说云桌面各种坑老是出现这样和那样的问题,而我们之所以用的还不错...

GZASD
20分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部