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

Laravel 4 Laravel 4-调用未定义的方法MyController::getAfterFilters(),laravel-4,Laravel 4,在Laravel 4应用程序中,当我尝试访问URI时,我收到以下错误: `Call to undefined method GroupsController::getAfterFilters()` 这个错误意味着问题出在我的app/filters.php文件上,所以让我们先回顾一下 App::before(function($request) { // }); App::after(function($request, $response) { // }); Route::

在Laravel 4应用程序中,当我尝试访问URI时,我收到以下错误:

`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:clear
composer dump autoload
,并清除浏览器的缓存,希望它能清除错误,但我仍然收到相同的错误消息

我在搜索谷歌时发现的唯一“建议”是重新安装一个Laravel应用程序,它会工作的。如果您正处于开发的初始阶段,那么这很好,但是我已经编写了大量代码,并在这个环境中设置了配置文件。话虽如此,我更愿意找到并解决根本问题

我想听听您的建议,帮助解决潜在问题。蒂亚


注: 我已经从filters.php文件中删除了占位符App::before和App::after方法调用,只是为了看看它是否引起了冲突,正如预期的那样,它没有产生任何影响

在my Laravel安装中,在第193行的
/vendors/Laravel/framework/src/illusted/Foundation/Console/routeCommand.php下定义了方法
getAfterFilters

    protected function getAfterFilters($route)
{
    return implode(', ', array_keys($route->afterFilters()));
}
所有这些都应作为默认Laravel安装的一部分加载。正如一位评论者所提到的,这听起来确实像是安装出了问题。然而,它对其他一切都很有效,所以我很困惑为什么它只发生在这一个资源上

我会继续深入研究的。随时发布建议

谢谢你抽出时间

供应商/Laraver/src/illumb/Foundation/Console/RouteCommand中的getAfterFilters()(应该)


听起来好像是安装出错了…

我完成了一个新的安装,将所有文件复制并粘贴到新的安装中(包括我的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文件中使用的
最小稳定性:dev
有关。但是,这只是猜测。

我遇到了同样的问题。我忘了回答

use App\Http\Controllers\Controller;

class SocketController extends Controller

看起来您正在尝试调用一个名为getAfterFilters()的GroupsController中不存在的方法。您是否在控制器中定义了此方法?如果它在其他地方,那么你应该确保它被明确提到。我最后做了一个新的安装,它现在工作正常。。。很奇怪。无论如何,谢谢你的时间。我更新了问题。在routeCommand.php中,定义了getAfterFilters。我将尝试直接在控制器中使用一些方法,看看它们是否可以访问。您需要显示完整的控制器。它是否扩展BaseController?我猜它没有,因此无法访问此方法。事实上,它访问了。尽管如此,我还是完成了一次新的安装,并将文件复制/粘贴到新项目中,现在它的效果非常好。