2013-02-15 17 views

Odpowiedz

12

Zwykle używam Group routes (ponieważ kontrolery zwykle mają taki sam typ filtrowania, jaki jest potrzebny, jeśli są powiązane) w celu ich uporządkowania lub jeśli chcesz/może mieć mniejszy plik tras, możesz chcieć register your controllers i wykonać dodatkowe sprawdzanie poprawności sprawdza parametry URL wewnątrz samego kontrolera.

+0

myślę pierwsza propozycja nie kurczy się plik, który wiele, a drugi po prostu wyeliminować trasy na dobre. Włączenie innych plików trasy, tak jak ktoś sugeruje, jest lepsze. – Srneczek

5

Właściwie trasy powinny pozostać cienkie. Po prostu przenieś swój kod do kontrolerów i użyj tras, aby się zarejestrować i przekierować do nich. Konwencja polega na przechowywaniu jednego kontrolera dla każdego pliku, dzięki czemu kod staje się automatycznie uporządkowany.

Spójrz na tego

// application/controllers/sample.php 
class Sample_Controller extends Base_Controller 
{ 
    public function action_index() 
    { 
     echo "Wellcome to the root" //www.testapp.com/sample 
    } 

    public function action_edit() 
    { 
     echo "Some editing functions here." //www.testapp.com/sample/edit 
    } 

    public function action_whatsoever() 
    { 
     echo "Put here whatever you like." //www.testapp.com/sample/whatsoever 
    } 

} 

Trasa kontrolera działanie może być zarejestrowany w ten sposób:

//application/routs.php 
Route::controller('admin::home'); 

Bardzo proste i komfortowe.

Aktualizacja:

Można również zarejestrować wszystkie kontrolery z tej linii dla całego aplikacja automatycznie:

Route::controller(Controller::detect()); 

lub regulator ze wszystkimi działaniami:

Route::controller(Controller::detect('yourcontroller')); 
+2

Prawo ... ale pytanie brzmi, co zrobić, gdy plik Routes.php staje się duży po zarejestrowaniu tylu kontrolerów. Również dla prostych tras i tak dalej, nie zawsze logiczne jest tworzenie dla nich kontrolera, co zwiększy również rozmiar pliku tras. Czy najlepiej jest tworzyć pliki wielu tras i włączać je w routes.php? –

+0

K, a następnie biegnę w niewłaściwym kierunku. Nigdy nie słyszałam o włączeniu wielu ścieżek do route.php nether. Ja zakładam, że nikt inny nie zrobiłby tego w ten sposób, więc to nie może być najlepszą praktyką. Czy możesz podać przykład swojej zawartości routes.php? Może to pomoże w analizie twojego problemu. – Hexodus

+1

Po prostu przedłużyłem swoją odpowiedź, aby pokazać, jak zarejestrować wszystkie kontrolery, w tym. wszystkie metody z jedną linią. – Hexodus

2

Alternatywnie możesz po prostu przechowywać trasy w różnych plikach, a następnie pobrać te pliki za pomocą:

Route::group(stuff,function(){ 
    include __DIR__.DS.'routes1.php'; 
    include __DIR__.DS.'routes2.php'; 
}); 

To daje ładny i czysty sposób sortowania klamkę, gdy pojawia się zbyt dużo kodu, także można po prostu wymienić

Route::controller(Controller::detect()); 

A potem uporządkować swoje kontrolery odpowiednio:

class Account_Controller extends Base_Controller { 
    public function action_login() { 
     //Login 
    } 

    public function action_logout() { 
     ... 
    } 

Jeśli musisz przejść do niektórych parametrów:

public function dosomething($input){ 
    ... 
    } 

można osiągnąć te funkcje tak:

http://yourapp/account/login 
    http://yourapp/account/logout 

Następnie można po prostu wywołać funkcję poprzez dodanie parametrów do adresu URL,

http://yourapp.account/dosomething/somedata 

Jeśli potrzebujesz kilka metod, które mają być chronione, a następnie dołączyć je bez działania_, dzięki czemu nie będą dostępne dla publiczności.

Alternatywnie można przełączyć się na spokojne metody, które są w zasadzie sposobem reagowania na niektóre dane wejściowe w zależności od typu otrzymywanego zapytania, na przykład po otrzymaniu żądania "GET" na stronę logowania, co oznacza, że ​​użytkownik musi zobaczyć ekran logowania, gdy pojawi się żądanie "POST", które zwykle oznacza, że ​​użytkownik publikuje dane logowania i odpowiednio możesz odpowiedzieć, co pomoże ci zmniejszyć liczbę funkcji, aby uzyskać więcej informacji o spokojnych metodach, które możesz przeczytaj ten genialny artykuł autorstwa Ryana Tomayako pod adresem: http://tomayko.com/writings/rest-to-my-wife

Aby użyć spokojnych metod, powinieneś wspomnieć o restful na true, a następnie dołączyć słowo kluczowe action przed nazwą funkcji.

public $restful = true; 
public function get_login() { 
return View::make('login'); 
//This function is accessible using GET request to http://yourapp/login 
} 

public function post_login() { 
    $data = Input::get(); 
    //do something using the Input data 
    //This function is accessible using a POST request to http://yourapp/login 
} 

W ten sposób można wyeliminować potrzebę kolejnej trasy do przetwarzania i weryfikacji poświadczeń użytkowników!

Jeśli nie chcesz, aby niektóre metody były dostępne za pomocą restrykcyjnych metod, po prostu nie wpisuj słowa akcji, (get, post, ...) w nazwie funkcji.

Połączenie niespokojnych metod z inteligentnym routingiem jest najskuteczniejszym sposobem na utrzymanie kodu w czystości i bezpieczeństwie.

23

Utworzony został katalog/aplikacja/routes/i dodane pliki. Każdy plik to tylko zestaw tras. Następnie w routes.php dodałem poniższy kod, żeby je wszystkie należą:

// Dynamically include all files in the routes directory 
foreach (new DirectoryIterator(__DIR__.DS.'routes') as $file) 
{ 
    if (!$file->isDot() && !$file->isDir() && $file->getFilename() != '.gitignore') 
    { 
     require_once __DIR__.DS.'routes'.DS.$file->getFilename(); 
    } 
} 
+0

Myślę, że jest to najpiękniejsze rozwiązanie.Ale czy myślisz, że Iterator Katalogów będzie działał za każdym razem, gdy użytkownik będzie próbował uzyskać dostęp do strony internetowej? jeśli tak, wyobrażam sobie, że może to spowodować pewien problem z wydajnością? – RPDeshaies

+0

To bardzo eleganckie rozwiązanie. @ Tareck117, jest możliwe, że może to wpłynąć na wydajność, jednak nie tak bardzo, że trzeba by było skupić się na nim od razu (chociaż jest to niski owoc wisi). – timgws

+0

Zgadzam się, że może to spowodować problem z wydajnością, ale byłby bardzo mały. Zwłaszcza w przypadku dysków SSD. Jeśli się o to martwisz, możesz buforować listę plików. – coffe4u

20

nawet po przyjęciu wszystkich najlepszych praktyk, jak wspomniano w innych odpowiedzi, Ie: za pomocą kontrolera zasobów, grup trasy itd

Możesz łatwo "dołączyć" pliki trasy w tradycyjny sposób. jak wspomniał Chris G w tym komentarzu.

można utworzyć prostą strukturę katalogów i dołączyć pliki tras do pliku route.php.

../myroutes 
--route-type-1.php 
--route-type-2.php 

W route.php pliku

include('myroutes/route-type-1.php'); 

Nie ma nic złego w tym. Oto jak trasy są zawarte w pakietach.

http://laravel.com/docs/packages#package-routing

+1

To powinno być oznaczone jako poprawna odpowiedź – Srneczek

+0

Czasami zapominam, że Laravel jest PHP i pozwala na takie rzeczy, a ludzie próbują nadkomplikować rzeczy i zrobić to "Laravel Way", gdy istnieje dobry stary sposób PHP dla wielu, wiele lat. Włączam się w to. –