Routing i przekazywanie do kontrolera 8.x
| Robert | komentarze | LaravelDzisiaj krótki wpis który może się przydać niektórym początkującym. Jak już wspomniałem na twitterze, dla odprężenia wracam na moment do PHP i w ramach czegoś nowego postanowiłem w końcu poznać framework jakim jest Laravel. Moją decyzję uzasadniam tym, że w wielu ofertach pracy rzucił mi się on w oczy oraz to, w jaki genialny sposób jest on skonstruowany (PSR-*, wzorzec MVC i inne). Szczerze żałuję, że jako początkujący te dziesięć lat temu uparcie dążyłem do tego by omijać tego typu narzędzia szerokim łukiem na rzecz próby pisania swoich projekcików od podstaw. Z drugiej strony bardziej poznałem podstawowe mechaniki rządzące PHP. Zatem, przejdźmy do rzeczy.
Poradniki które przeglądałem, zarówno tekstowe jak i te z serwisu YouTube zwykle dotyczą wersji wcześniejszych niż 8.x i wskazują, że aby przekazać routing bezpośrednio do kontrolera należy wpisać w miejscu, gdzie powinna być wskazana funkcja anonimowa, string 'NazwaKontroleraController@nazwaMetody' i to wszystko. Natomiast od wersji 8.x w zwyż rzeczywiście wskazywanie metody kontrolera jest zupełnie inne. Przyjżyjmy się zatem. Tworzymy nowy kontroler o nazwie MyController.
php artisan make:controller MyController
Następnie tworzymy w nim prostą metodę o nazwie myMethod.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class MyController extends Controller
{
public function myMethod() {
return 'jakiś tekst';
}
}
Następnie w pliku web.php możemy wskazać na wyżej zdefiniowaną metodę nie zapominając o odpowiedniej deklaracji use.
use App\Http\Controllers\MyController;
Route::get('/', [MyController::class, 'myMethod']);
Tak wygląda to w przypadku frameworka Laravel w wersji 8.x i wyżej, dla przypomnienia sposób wskazywania kontrolera oraz metody w routingu dla wcześniejszych wersji zakładając, że kontroler jak i metoda nazywają się jak powyżej:
Route::get('/', 'MyController@myMethod');
[30.04.2022 20:35] Mała edycja, otóż powyższy sposób działa już od wersji 5.7 jednak wymuszona została dopiero w wersji 8.x, może i lepiej.