【问题标题】:Calling frontend controller yii2 using Shell not working使用 Shell 调用前端控制器 yii2 不起作用
【发布时间】:2020-08-11 10:08:50
【问题描述】:

我是 Yii2 框架的新手,我正在尝试调用位于下面前端文件夹中的控制器

htdocs/project/frontend/controllers/MyController.php

我要调用的方法是

actionTest_method()

在终端(在项目根目录下),我正在写

php yii my/test_method

我试过了

php yii frontend/controllers/my/test_method 

但没用 错误,我收到 InvalidRouteException

【问题讨论】:

  • 应该是MyController.php(大写C)。
  • @rob006 它已经是 MyController.php
  • 您需要configure console app 才能使用前端控制器来执行此操作。

标签: php shell yii yii2


【解决方案1】:

首先。您无需从控制台调用前端控制器。如果你想这样做。您可以使用以下 URL 模式使用 curl 命令。 Yii2 URL routing

curl GET 'example.com/my/action-name' 

但是,根据 Yii2 指南,您可以使用 console commands 从控制台运行脚本。

所以你的控制器应该在命令目录中。

这是 Yii2 基本应用模板的helloController.php

<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace app\commands;

use yii\console\Controller;
use yii\console\ExitCode;

/**
 * This command echoes the first argument that you have entered.
 *
 * This command is provided as an example for you to learn how to create console commands.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
class HelloController extends Controller
{
    /**
     * This command echoes what you have entered as the message.
     * @param string $message the message to be echoed.
     * @return int Exit code
     */
    public function actionIndex($message = 'hello world')
    {
        echo $message . "\n";

        return ExitCode::OK;
    }
}

正如你所见,这扩展了yii\console\Controller,它能够运行带有 Yii2 特性的控制台命令。

使用此示例代码。你只需要运行

php yii hello

脚本会输出

hello world

在您的情况下,在命令目录中创建一个 MyController.php 扩展 yii\console\Controller 的类。

输入以下代码。

<?php
   
    namespace app\commands;
    
    use yii\console\Controller;
    
    class MyController extends Controller
    {
       
        public function actionTest_method()
        {
            echo 'I am test method';
    
        }
    }

然后运行

php yii my/test_method

在根目录中。

【讨论】:

    【解决方案2】:

    小提示:如果是“高级”模板 - 控制台控制器位于“控制台”文件夹中,否则如果是“基本” - 在“命令”文件夹中

    【讨论】:

      【解决方案3】:

      您的控制台控制器必须位于 htdocs/project/console/controllers/ 还要检查你的控制台配置是否有控制器名称空间

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多