symfony3.x 命令行操作Command

简介: Symfony3.x.x通过命令行操作数据库 配置app/config/parameters.yml parameters: database_host: 127.0.0.1 database_port: 3306 database_name: test data.

Symfony3.x.x通过命令行操作数据库

  1. 配置app/config/parameters.yml

    parameters:
        database_host: 127.0.0.1
        database_port: 3306
        database_name: test
        database_user: root
        database_password: null
        mailer_transport: smtp
        mailer_host: 127.0.0.1
        mailer_user: 127001@qq.com
        mailer_password: null
        secret: 8ab34c9326ac123b2dea2fab13e4ab
  2. 配置app/config/config.yml

    doctrine:
        dbal:
            driver:   pdo_mysql
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
  3. 创建TestBundle
  4. 在TestBundle目录(文件夹)下,新建Command目录(文件夹)
  5. 在Command目录新建TestCommand.php,代码如下:

    <?php
    //src/TestBundle/Command/TestCommand.php
    namespace TestBundle\Command;
    
    use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
    use Symfony\Component\Console\Output\OutputInterface;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Input\InputArgument;
    use Symfony\Component\Console\Input\InputOption;
    
    class TestCommand extends ContainerAwareCommand
    {
        protected function configure()
        {
            $this->setName('database:run')
                ->setDescription('Run an action.')
                ->addArgument('name', InputArgument::OPTIONAL, 'Chouse an action to run.')
                ->addOption('show', null, InputOption::VALUE_NONE, 'Show result.');
        }
        protected function execute(InputInterface $input, OutputInterface $output)
        {
            $name = $input->getArgument('name');
            if ($name == 'action1'){
                $text = $this->myAction1();
            }elseif($name == 'action2')
            {
                $text = $this->myAction2();
            }elseif($name == 'action3')
            {
                $text = $this->myAction3();
            }else
            {
                $text = 'Error[101]:Cmd error.';
            }
            if (!$input->getOption('show')){
                $text = NULL;
            }
            $output->writeln($text);
        }
        protected function myAction1()
    {
    //这句非常重要
            $conn = $this->getContainer()->get('database_connection');
            $bool= $conn->exec(
    //这里的SQL语句自己定义
                'INSERT INTO 表名(id,live,age)VALUE(1,\'dog\',20)'
            );
            $conn = null;
            if($bool)
                $str = "Action1 has been executed.";
            else
                $str = "Not insert data.";
            return $str;
        }
        protected function myAction2()
        {
            if(true)
                $str = "Action2 has been executed.";
            else
                $str = "Did not perform any action!";
            return $str;
        }
        protected function myAction3()
        {
            if(true)
                $str = "Action3 has been executed.";
            else
                $str = "Did not perform any action!";
            return $str;
        }
    }
  6. 尝试在命令行执行:

    Php bin/console --show database:run action1

    (1)如果返回:Action1 has been executed.说明操作成功;

    (2)如果返回:Not insert data.就要检查自己的sql语句是否有误

  7. 如果命令行中不输入:‘--show’表示不显示执行结果。
  8. action1 也可以是action2、action3。

意义

Symfony通过命令行操作数据库的意义在于

  1. 可以将方法不和URL进行绑定,实现方法的运行,有效防止sql注入;
  2. 由于命令定义的灵活性,非内部人员不知道你的命令行的格式,也不知道其实现何种操作。
目录
相关文章
|
3月前
|
Kubernetes Go Docker
cobra - 更容易地构建命令行应用
cobra - 更容易地构建命令行应用
38 0
|
4月前
|
Shell Linux 数据安全/隐私保护
Notepad-- 轻量级文本编辑器的安装及基本使用
【7月更文挑战第11天】Notepad-- 轻量级文本编辑器的安装及基本使用
175 3
小匕首-dotnet cli使用tool指令
小匕首-dotnet cli使用tool指令
150 0
|
Shell PHP Windows
php交互式命令行工具window操作系统安装readline扩展函数实现interactive mode enabled到Interactive Shell
php交互式命令行工具window操作系统安装readline扩展函数实现interactive mode enabled到Interactive Shell
100 0
|
PHP Windows
Windows下laravel/lumen中执行phpunit报phpunit: command not found解决办法
Windows下laravel/lumen中执行phpunit报phpunit: command not found解决办法
167 0
Windows下laravel/lumen中执行phpunit报phpunit: command not found解决办法
|
JavaScript 前端开发
使用commander和inquirer创建命令行交互项目
使用commander和inquirer创建命令行交互项目
355 0
使用commander和inquirer创建命令行交互项目
|
Shell 开发工具 git
easyswoole 更新代码shell
easyswoole 更新代码shell
75 0
|
JavaScript 测试技术 数据安全/隐私保护
Cypress系列(63)- 使用 Cypress.Commands 完成 Custom Commands 自定义命令
Cypress系列(63)- 使用 Cypress.Commands 完成 Custom Commands 自定义命令
259 0
Cypress系列(63)- 使用 Cypress.Commands 完成 Custom Commands 自定义命令
Cypress系列(85)- Cypress.platform 命令详解
Cypress系列(85)- Cypress.platform 命令详解
112 0
Cypress系列(85)- Cypress.platform 命令详解