Routing i przekazywanie do kontrolera 8.x

|
Robert
| komentarze | Laravel

Dzisiaj 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.