Javascript 检查是否存在任意控制器/操作

Javascript 检查是否存在任意控制器/操作,javascript,php,yii2,Javascript,Php,Yii2,有没有办法检查控制器/动作是否存在任意组合?(不是当前的。) 类似于Yii::$app->exist(控制器/动作) 是否有可能检查一下路线或其他什么 我需要的是检查参数是否作为 <?php echo Yii::$app->request->baseUrl.'/controller/action' ?> JavaScript通用函数在通过Ajax执行之前就已经存在。您可以使用方法\u exists检查这一点。就像这样: method_exists(Yii::$app

有没有办法检查控制器/动作是否存在任意组合?(不是当前的。)

类似于
Yii::$app->exist(控制器/动作)

是否有可能检查一下路线或其他什么

我需要的是检查参数是否作为

<?php echo Yii::$app->request->baseUrl.'/controller/action' ?>


JavaScript通用函数在通过Ajax执行之前就已经存在。

您可以使用
方法\u exists检查这一点。就像这样:

method_exists(Yii::$app->controllerNamespace . $controllerName, 'action' . ucfirst($actionName));// $actionName with first lette is uppercase
欲知更多-

编辑:

或者您可以使用以下方式:

$controller = Yii::$app->createController('controller');// 
if (!$controller !== null && method_exists($controller, 'action')) {
   echo 'controller/action is allow :)';
}
或者我发明了更好的使用yii2api的方法:

$controller = Yii::$app->createController('controller');// 
if (!$controller !== null && $controller->hasMethod('action'))) {
   echo 'controller/action is allow :)';
}

受@vitalik_74的启发,在参考和测试后,我在Yii 1.1中发现了这部作品:

函数isActionExistsInController($actionId、$controllerId、$moduleId=null){
$route=$moduleId?$moduleId.'/'.$controllerId.'/'.$actionId:$controllerId.'/'.$actionId;
$controller=Yii::app()->createController($route);
返回!!$controller;
}

最可靠的方法是创建操作实例

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;
}

它仅适用于特定文件夹/命名空间。但不确定他是否要在所有应用程序控制器上检查它。