我在哪里可以放置laravel 4过滤器类?

jus*_*bie 9 php laravel laravel-4

在laravel 4中,您可以创建过滤器类,而不是将整个过滤器放在闭包中 - 非常棒.但这些过滤器必须完全在app/filters.phpapp/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() { ... }
}
Run Code Online (Sandbox Code Playgroud)

Ash*_*ora 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');
Run Code Online (Sandbox Code Playgroud)

我通过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"
    ]
},
Run Code Online (Sandbox Code Playgroud)

更新composer.json文件后,需要运行该命令

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

要确认您将加载文件,请查看

vendor/composer/autoload_classmap.php
Run Code Online (Sandbox Code Playgroud)


Wri*_*ken 6

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

有一个'local.php' 似乎是候选者,但这仅适用于特定环境(通常是开发,只要你添加一个正确的数组或闭包$app->detectEnvironment()).