在laravel 4中,您可以创建过滤器类,而不是将整个过滤器放在闭包中 - 非常棒。但这些过滤器必须完全位于app/filters.php
或app/routes.php
吗?
一般来说,我喜欢每个类做一个文件,但我想有一些更好的事情要做,然后在filters.php文件中包含一堆。你会把这些用于laravel自动找到它们?例如:
Route::filter('Thing', 'ThingFilter');
# can I put this in its own file and have laravel automatically use it?
class ThingFilter {
function filter() { ... }
}
答案 0 :(得分:16)
我的所有过滤器都在一个名为过滤器的单独目录中。 这是我的filters.php文件的样子......
//---------------------------------------------------------
// Route Filters
//---------------------------------------------------------
Route::filter('auth', 'AuthFilter@default');
Route::filter('auth.basic', 'AuthFilter@basic');
Route::filter('guest', 'AuthFilter@guest');
Route::filter('csrf', 'CsrfFilter');
我通过 composer.json
自动加载它们"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/filters",
"app/presenters",
"app/repositories",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
更新composer.json文件后,需要运行命令
composer dump-autoload
要验证您的文件是否已加载,请查看
vendor/composer/autoload_classmap.php
答案 1 :(得分:6)
我的知识没有默认值,但您可以调用ClassLoader::addDirectories(array(app_path().'/filters'));
来注册您的过滤器目录。放置它的正确位置是 app/start/global.php
,您应该看到已经注册了一些文件夹。
有一个'local.php'似乎是候选者,但这仅适用于特定环境(通常是开发,只要在$app->detectEnvironment()
中添加正确的数组或闭包)