是否有任何方法可以检查控制器/动作的任意组合?(不是当前版本。)
类似Yii::$app->exist(controller/action);
是否可以检查路线?
我需要的是检查一个参数是否作为传递
<?php echo Yii::$app->request->baseUrl.'/controller/action' ?>
到一个JavaScript通用函数,该函数在通过Ajax执行之前就已经存在。
您可以使用method_exists
进行检查。比如:
method_exists(Yii::$app->controllerNamespace . $controllerName, 'action' . ucfirst($actionName));// $actionName with first lette is uppercase
更多信息-http://php.net/manual/en/function.method-exists.php
编辑:
或者你可以用这种方式:
$controller = Yii::$app->createController('controller');//
if (!$controller !== null && method_exists($controller, 'action')) {
echo 'controller/action is allow :)';
}
或者我发明了使用Yii2 Api:的更好方法
$controller = Yii::$app->createController('controller');//
if (!$controller !== null && $controller->hasMethod('action'))) {
echo 'controller/action is allow :)';
}
最可靠的方法是创建Action实例。
public function actionExists($controllerId, $actionId, $module = null)
{
if ($module === null) {
$module = Yii::$app;
}
$controller = $module->createControllerByID($controllerId);
if ($controller === null) {
return false;
}
$action = $controller->createAction($actionId);
if ($action === null) {
return false;
}
return true;
}
受@vitalik_74的启发,在参考源代码并测试后,我在Yii 1.1:中发现了这一点
function isActionExistsInController($actionId, $controllerId, $moduleId = null) {
$route = $moduleId ? $moduleId.'/'.$controllerId.'/'.$actionId : $controllerId.'/'.$actionId;
$controller = Yii::app()->createController($route);
return !!$controller;
}