检查是否已定义Laravel Controller Action

时间:2017-06-03 14:14:14

标签: php laravel-5 laravel-5.3 laravel-5.4

我有一个应用程序,我将在数据库中存储链接,允许用户为链接分配操作。我想避免行动不存在的情况,我得到这个错误;

  

操作App \ Http \ Controllers \ PermissionController @ index2未定义。

所以我想检查一个动作是否存在并且有路由。如果可能的话,在刀片上,但其他任何地方都可以。

1 个答案:

答案 0 :(得分:5)

没有任何内置方法可以做到这一点。但是我们有一个action辅助方法,它根据控制器动作生成路由URL。我们可以利用这个并创建一个简单的辅助函数来实现相同的结果。该方法还检查给定的控制器方法是否链接到路由,因此它完全符合您的需要。

function action_exists($action) {
    try {
        action($action);
    } catch (\Exception $e) {
        return false;
    }

    return true;
}

// Sample route
Route::get('index', 'TestController@index');

$result = action_exists('TestController@index');
// $result is true

$result = action_exists('TestController@index1');
// $result is false

您也可以直接使用该类验证操作方法的存在,但如果方法存在但未链接到路径,则返回true。