如何将yii 2.0操作所需参数列表作为数组获取?

时间:2017-03-10 13:37:04

标签: php yii2

当用户在没有必要参数的情况下访问我的yii 2.0应用程序中的特定网址时,我想提供一个表单来收集所需的缺失参数。

为此目的,我需要缺少参数的名称,例如我有一个功能

 public function actionBlast ($bomb, $building) {

  }  

我希望结果像这样的数组

$args = [0=>'bomb', 1=>'building'];

我试过func_get_args()但是它返回null,而未记录的ReflectionFunctionAbstract::getParameters ( void )等等还有其他出路吗?

1 个答案:

答案 0 :(得分:1)

我认为实现您想要的最佳方法是覆盖默认的ErrorAction。 在您的控制器目录中,创建:

  • 控制器
    • 动作
      • ErrorAction.php

在ErrorAction.php中,添加:

<?php

namespace frontend\controllers\actions;

use Yii;
use yii\web\ErrorAction as DefaultErrorAction;

class ErrorAction extends DefaultErrorAction
{
    public function run()
    {
        $missing_msg = 'Missing required parameters:';
        $exception = Yii::$app->getErrorHandler()->exception;
        if (substr($exception->getMessage(), 0, strlen($missing_msg)) === $missing_msg) {

            $parameters = explode(',', substr($exception->getMessage(), strlen($missing_msg)));
            return $this->controller->render('missing_params_form' ?: $this->id, [
                'parameters' => $parameters,
            ]);
        }
        return parent::run();
    }
}

在你的控制器中添加:

public function actions()
{
    return [
        'error' => [
            'class' => 'frontend\controllers\actions\ErrorAction',
        ],
    ];
}

并创建一个视图&#34; missing_params_form.php&#34;在控制器的视图目录中,您可以在其中生成表单域。

我认为这是您的最佳选择,但如果Yii更新更改了错误消息,您可能需要更新它。