Laravel 4 - 调用未定义的方法MyController :: getAfterFilters()

时间:2014-03-10 13:46:37

标签: laravel-4

在Laravel 4应用中,当我尝试访问URI http://app.dev/groups时,收到以下错误:

`Call to undefined method GroupsController::getAfterFilters()`

错误意味着问题出在我的app / filters.php文件中,所以让我们首先回顾一下。

App::before(function($request)
{
    //
});

App::after(function($request, $response)
{
    //
});

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::route('users/login');
});

Route::filter('guest', function()
{
    if (Auth::check()) return Redirect::route('users/profile');
});

这一切都很简单。 Auth过滤器适用于所有其他路由,因此我没有看到与该问题相关。接下来,让我们检查路线:

Route::group(["before" => "auth"], function()
{
     // ...

     Route::resource('groups', 'GroupsController');

     // ...
}

所有其他路由(Route :: get和Route :: resource)都可以解决问题。所以,这似乎不是问题。更令人困惑的是,当我重命名MVC并从GroupsController路由到BillingController时,这一切都有效,包括渲染视图。所以,我认为这个问题已经解决了。但是,我仍然需要GroupsController,所以我从头开始创建所有文件,当我去加载URI时,我再次收到相同的错误消息。

我已尝试php artisan cache:clearcomposer dump-autoload并清除浏览器的缓存,希望它能清除错误,但我仍会收到相同的错误消息。

我发现搜索Google的唯一“建议”就是全新安装一个Laravel应用程序,它会起作用。如果您处于开发的开始阶段,这很好,但我已经有相当多的代码编写和配置文件围绕此环境设置。话虽如此,我更愿意找到并解决潜在的问题。

我想听听您的建议,以帮助解决根本问题并解决问题。 TIA。


注意:

我已经从filters.php文件中删除了占位符App :: before和App :: after方法调用,只是为了查看它是否导致了冲突,并且正如预期的那样,它没有什么区别。

在我的Laravel安装中,在/vendors/laravel/framework/src/Illuminate/Foundation/Console/RoutesCommand.php下的第193行,定义了getAfterFilters方法:

    protected function getAfterFilters($route)
{
    return implode(', ', array_keys($route->afterFilters()));
}

所有这些都应作为默认Laravel安装的一部分加载。正如一位评论员提到的,这听起来像是安装出了问题。但是,它对其他一切都运行良好,所以我很困惑为什么它只发生在这一个资源上。

我要继续深入研究它。随意发布建议。

而且,谢谢你的时间。

3 个答案:

答案 0 :(得分:1)

供应商/ Laraver / src / Illuminate / Foundation / Console / RoutesCommand中的

getAfterFilters()(应该)exists

听起来安装出错......

答案 1 :(得分:0)

我最终进行了全新安装,将所有文件复制并粘贴到全新安装中(包括我的app / config / app.php等),现在它按预期工作。

解决此问题的最简单方法是重命名项目文件夹并在目录中附加版本号:

cp -R myProject myProject-v0.0.1

rm -Rf myProject

mkdir myProject && cd myProject

composer create-project laravel/laravel ./ --prefer-dist

使用您需要的任何软件包以及自动加载的文件和psr-4部分更新您的composer.json文件。接下来,我们更新:

composer update

现在,您已准备好将已开发的代码从../myProject-v0.0.1文件夹移动到新项目中(不要忘记更新您的app / config / files(app.php,database.php,等等))。

现在,它应该像魅力一样工作。

这不能解决根本问题,但它确实证明问题是特定于安装的。我希望它与更新以及我在composer.json文件中使用minimum-stability: dev的事实有关。但是,这只是猜测。

答案 2 :(得分:0)

我遇到了同样的问题。我忘了延长

use App\Http\Controllers\Controller;

class SocketController extends Controller