返回首页 - Notes - 2015

在 Symfony2 中创建自定义命令


  1. 首先在自己的 Bundle 目录下创建一个名为 Command 的文件夹
  2. 然后在该文件夹下创建 PHP 文件,命名规则为 自定义名称+Command.php
  3. 基本的代码结构以及详细用法都可以在 Symfony2 官网文档中找到
  4. 下面是一个自定义命令示例文件:
    <?php
    
    namespace Site\CommonBundle\Command;
    
    use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
    use Symfony\Component\Console\Input\InputArgument;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Output\OutputInterface;
    use Site\AdminBundle\Entity\Groups;
    
    class GenerateGroupItemCommand extends ContainerAwareCommand
    {
        protected function configure()
        {
            $this
                ->setName('generate:group:item')
                ->setDescription('Generate a group item')
                ->addArgument('ename', InputArgument::REQUIRED, "Group's ename")
                ->addArgument('name', InputArgument::REQUIRED, "Group's name")
                ->addArgument('columns', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, "Group's columns")
                ;
        }
    
        protected function execute(InputInterface $input, OutputInterface $output)
        {
            $this->em = $this->getContainer()->get('doctrine')->getManager();
            $this->generateGroupItem($input, $output);
        }
    
        protected function generateGroupItem(InputInterface $input, OutputInterface $output)
        {
            $ename = $input->getArgument('ename');
            $name = $input->getArgument('name');
            $columns = $input->getArgument('columns');
    
            if (empty($ename)) {  // 权限组别名不能为空
                $output->writeln('<comment>ename can not be empty</comment>');
    
                return;
            }
            if (empty($name)) {  // 权限组名称不能为空
                $output->writeln('<comment>name can not be empty</comment>');
    
                return;
            }
    
            // 判断别名是否已存在
            $group = $this->em->getRepository('SiteAdminBundle:Groups')->findOneBy(array('ename' => $ename));
            if ($group) {
                $output->writeln("<error>ename {$ename} is exists</error>");
    
                return;
            }
    
            // 默认赋予全部栏目权限
            $columns = empty($columns) ? 'all' : json_encode($columns);
    
            $item = new Groups();
            $item->setEname($ename);
            $item->setName($name);
            $item->setColumns($columns);
            $item->setStatus(1);
            $this->em->persist($item);
            try {
                $this->em->flush();
            } catch (\Exception $e) {
                $output->writeln('<error>'.$e->getMessage().'</error>');
            }
    
            if ($id = $item->getId()) {
                $output->writeln("<info>Group {$ename} generated success, id is {$id}</info>");
            }
        }
    }
    

date:2015-06-29