9

在 laravel 4 中,您可以创建过滤器类,而不是将整个过滤器放在一个闭包中——太好了。但是这些过滤器是否必须完全在app/filters.phpor中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() { ... }
}
4

2 回答 2

16

我将所有过滤器都放在一个名为filters的单独目录中。这就是我的 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
于 2013-11-29T16:19:37.050 回答
6

据我所知,没有默认设置,但您可以致电ClassLoader::addDirectories(array(app_path().'/filters'));注册您的过滤器目录。正确的放置位置是app/start/global.php您应该看到一些已注册的文件夹。

有一个 'local.php'似乎是一个候选对象,但这仅适用于特定环境(通常是开发,前提是您在 中添加适当的数组或闭包$app->detectEnvironment())。

于 2013-04-26T01:06:05.603 回答