当用户在没有必要参数的情况下访问我的yii 2.0应用程序中的特定网址时,我想提供一个表单来收集所需的缺失参数。
为此目的,我需要缺少参数的名称,例如我有一个功能
public function actionBlast ($bomb, $building) {
}
我希望结果像这样的数组
$args = [0=>'bomb', 1=>'building'];
我试过func_get_args()
但是它返回null,而未记录的ReflectionFunctionAbstract::getParameters ( void )
等等还有其他出路吗?
答案 0 :(得分:1)
我认为实现您想要的最佳方法是覆盖默认的ErrorAction。 在您的控制器目录中,创建:
在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更新更改了错误消息,您可能需要更新它。