2013-04-26 16 views
9

W laravel 4 można tworzyć klasy filtrów zamiast umieszczać cały filtr w zamknięciu - świetnie. Ale czy te filtry muszą być w całości w app/filters.php lub app/routes.php?Gdzie mogę umieścić klasy filtrów laravel 4?

Generalnie lubię robić jeden plik na klasę, ale wyobrażam sobie, że jest coś lepszego do zrobienia niż paczka zawiera w pliku filters.php. Gdzie umieściłbyś je na laravel, aby znaleźć je automatycznie? Na przykład:

Route::filter('Thing', 'ThingFilter'); 

# can I put this in its own file and have laravel automatically use it? 
class ThingFilter { 
    function filter() { ... } 
} 
+0

Nie ma domyślnej wiedzy, ale można wywołać 'ClassLoader :: addDirectories (array (app_path(). '/ Filters'));', aby zarejestrować swój katalog filtrów. – Wrikken

+0

Najbardziej prawdopodobne miejsce do umieszczenia, które prawdopodobnie znajduje się w 'start/{$ env} .php', więc na przykład' start/production.php'. – Wrikken

+0

wpisz swój komentarz jako odpowiedź, a ja to zaakceptuję :) Dziękujemy! –

Odpowiedz

6

Nie ma domyślnie mojej wiedzy, ale można nazwać ClassLoader::addDirectories(array(app_path().'/filters')); zarejestrować swój katalog filtra. Prawidłowe miejsce do umieszczenia w tym miejscu to app/start/global.php gdzie powinieneś zobaczyć niektóre foldery już zarejestrowane.

Jest „local.php”, który wydaje kandydata, ale ta jest przeznaczona tylko dla określonych środowisk (zwykle rozwoju, pod warunkiem, dodać odpowiednią tablicę lub zamknięcie w $app->detectEnvironment()).

16

Mam wszystkie moje filtry w osobnym katalogu o nazwie filtry. A oto jak mój plik wygląd filters.php jak ...

//--------------------------------------------------------- 
// Route Filters 
//--------------------------------------------------------- 
Route::filter('auth', '[email protected]'); 
Route::filter('auth.basic', '[email protected]'); 
Route::filter('guest', '[email protected]'); 
Route::filter('csrf', 'CsrfFilter'); 

I autoLoad je poprzez 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" 
    ] 
}, 

Po zaktualizowaniu pliku composer.json, trzeba uruchomić komenda

composer dump-autoload 

Aby verfiy że wy pliki zostaną załadowane, sprawdź