Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何以数组的形式获取yii 2.0操作所需的参数列表?_Php_Yii2 - Fatal编程技术网

Php 如何以数组的形式获取yii 2.0操作所需的参数列表?

Php 如何以数组的形式获取yii 2.0操作所需的参数列表?,php,yii2,Php,Yii2,当用户在没有必需参数的情况下访问我的yii 2.0应用程序中的特定url时,我希望提供一个表单来收集缺少的必需参数 为此,我需要缺少参数的名称,例如,我有一个函数 public function actionBlast ($bomb, $building) { } 我希望结果是这样的数组 $args = [0=>'bomb', 1=>'building']; 我尝试了func\u get\u args(),但它返回null,以及未记录的reflectionfuncti

当用户在没有必需参数的情况下访问我的yii 2.0应用程序中的特定url时,我希望提供一个表单来收集缺少的必需参数

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

 public function actionBlast ($bomb, $building) {

  }  
我希望结果是这样的数组

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

我尝试了
func\u get\u args()
,但它返回null,以及未记录的
reflectionfunctionbstract::getParameters(void)
等。还有其他解决方法吗

我认为实现您想要的最好方法是覆盖默认的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();
    }
}
并在控制器的视图目录中创建一个视图“missing_params_form.php”,从中可以生成表单字段


我相信这是您最好的选择,尽管您可能需要更新它,以防Yii更新更改错误消息。

$parameters=explode(',',,substr($exception->getMessage(),strlen($missing_msg))这个东西不是很漂亮,相反,我们应该关注Yii2是如何收集缺少的参数的。但是你建议使用override ErrorAction是一个非常好的主意,值得投票表决。不幸的是,我不认为有一个很好的方法可以做到这一点。您可以查看yii\web\Controller的“bindActionParams()”并使用其中的代码。同时,您不认为这个问题值得投票吗
public function actions()
{
    return [
        'error' => [
            'class' => 'frontend\controllers\actions\ErrorAction',
        ],
    ];
}