Laravel - kontrolery
W ramach MVC litera „C” oznacza kontroler. Pełni funkcję kierowania ruchem między Widokami i Modelami. W tym rozdziale dowiesz się o kontrolerach w Laravel.
Tworzenie kontrolera
Otwórz wiersz polecenia lub terminal oparty na używanym systemie operacyjnym i wpisz następujące polecenie, aby utworzyć kontroler za pomocą Artisan CLI (interfejs wiersza poleceń).
php artisan make:controller <controller-name> --plain
Zastąp <controller-name> nazwą swojego kontrolera. Spowoduje to utworzenie zwykłego konstruktora, gdy przekazujemy argument -plain. Jeśli nie chcesz tworzyć zwykłego konstruktora, możesz po prostu zignorować argument. Utworzony konstruktor można zobaczyć pod adresemapp/Http/Controllers.
Zobaczysz, że niektóre podstawowe kodowania zostały już wykonane i możesz dodać własne kodowanie. Utworzony kontroler można wywołać z route.php przy użyciu następującej składni.
Składnia
Route::get(‘base URI’,’controller@method’);
Przykład
Step 1 - Wykonaj następujące polecenie, aby utworzyć UserController.
php artisan make:controller UserController --plain
Step 2 - Po pomyślnym wykonaniu otrzymasz następujące dane wyjściowe.
Step 3 - Możesz zobaczyć utworzony kontroler pod adresem app/Http/Controller/UserController.php z podstawowymi kodami już napisanymi dla Ciebie i możesz dodać własne kodowanie w zależności od potrzeb.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
//
}
Oprogramowanie pośredniczące kontrolera
Widzieliśmy już wcześniej oprogramowanie pośredniczące i można go również używać z kontrolerem. Oprogramowanie pośredniczące można również przypisać do trasy kontrolera lub w konstruktorze kontrolera. Za pomocą metody oprogramowania pośredniego można przypisać oprogramowanie pośrednie do kontrolera. Zarejestrowane oprogramowanie pośredniczące można również ograniczyć do określonej metody kontrolera.
Przypisywanie oprogramowania pośredniczącego do routingu
Route::get('profile', [
'middleware' => 'auth',
'uses' => 'UserController@showProfile'
]);
Tutaj przypisujemy oprogramowanie pośredniczące uwierzytelniania do UserController w trasie profilu.
Przypisywanie oprogramowania pośredniczącego w konstruktorze kontrolera
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function __construct() {
$this->middleware('auth');
}
}
Tutaj przypisujemy auth oprogramowanie pośredniczące przy użyciu metody oprogramowania pośredniego w UserController konstruktor.
Przykład
Step 1 - Dodaj następujące wiersze kodu do pliku app/Http/routes.php plik i zapisz go.
routes.php
<?php
Route::get('/usercontroller/path',[
'middleware' => 'First',
'uses' => 'UserController@showPath'
]);
Step 2 - Utwórz oprogramowanie pośredniczące o nazwie FirstMiddleware wykonując następujący wiersz kodu.
php artisan make:middleware FirstMiddleware
Step 3 - Dodaj następujący kod do pliku handle metoda nowo utworzonego FirstMiddleware pod adresem app/Http/Middleware.
FirstMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
class FirstMiddleware {
public function handle($request, Closure $next) {
echo '<br>First Middleware';
return $next($request);
}
}
Step 4 - Utwórz oprogramowanie pośredniczące o nazwie SecondMiddleware wykonując następujące polecenie.
php artisan make:middleware SecondMiddleware
Step 5 - Dodaj następujący kod do metody handle nowo utworzonego SecondMiddleware pod adresem app/Http/Middleware.
SecondMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
class SecondMiddleware {
public function handle($request, Closure $next) {
echo '<br>Second Middleware';
return $next($request);
}
}
Step 6 - Utwórz kontroler o nazwie UserController wykonując następujący wiersz.
php artisan make:controller UserController --plain
Step 7 - Po pomyślnym wykonaniu adresu URL otrzymasz następujące dane wyjściowe -
Step 8 - Skopiuj poniższy kod do app/Http/UserController.php plik.
app/Http/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function __construct() {
$this->middleware('Second');
}
public function showPath(Request $request) {
$uri = $request->path();
echo '<br>URI: '.$uri;
$url = $request->url();
echo '<br>';
echo 'URL: '.$url;
$method = $request->method();
echo '<br>';
echo 'Method: '.$method;
}
}
Step 9 - Teraz uruchom wewnętrzny serwer WWW php, wykonując następujące polecenie, jeśli jeszcze go nie wykonałeś.
php artisan serve
Step 10 - Odwiedź następujący adres URL.
http://localhost:8000/usercontroller/path
Step 11 - Dane wyjściowe będą wyglądać tak, jak pokazano na poniższej ilustracji.
Restful Resource Controllers
Często podczas tworzenia aplikacji musimy wykonać CRUD (Create, Read, Update, Delete)operacje. Laravel ułatwia nam tę pracę. Po prostu utwórz kontroler, a Laravel automatycznie zapewni wszystkie metody operacji CRUD. Możesz także zarejestrować jedną trasę dla wszystkich metod w pliku tours.php.
Przykład
Step 1 - Utwórz kontroler o nazwie MyController wykonując następujące polecenie.
php artisan make:controller MyController
Step 2 - Dodaj następujący kod w
app/Http/Controllers/MyController.php plik.
app/Http/Controllers/MyController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class MyController extends Controller {
public function index() {
echo 'index';
}
public function create() {
echo 'create';
}
public function store(Request $request) {
echo 'store';
}
public function show($id) {
echo 'show';
}
public function edit($id) {
echo 'edit';
}
public function update(Request $request, $id) {
echo 'update';
}
public function destroy($id) {
echo 'destroy';
}
}
Step 3 - Dodaj następujący wiersz kodu w app/Http/routes.php plik.
app/Http/routes.php
Route::resource('my','MyController');
Step 4- Rejestrujemy teraz wszystkie metody MyController, rejestrując kontroler z zasobem. Poniżej znajduje się tabela akcji obsługiwanych przez kontroler zasobów.
Czasownik | Ścieżka | Akcja | Nazwa trasy |
---|---|---|---|
DOSTAĆ | /mój | indeks | my.index |
DOSTAĆ | / my / create | Stwórz | my.create |
POCZTA | /mój | sklep | mój sklep |
DOSTAĆ | / mój / {mój} | pokazać | moje przedstawienie |
DOSTAĆ | / mój / {mój} / edytuj | edytować | moja zmiana |
PUT / PATCH | / mój / {mój} | aktualizacja | my.update |
USUNĄĆ | / mój / {mój} | zniszczyć | my.destroy |
Step 5 - Spróbuj wykonać adresy URL przedstawione w poniższej tabeli.
URL | Opis | Obraz wyjściowy |
---|---|---|
http: // localhost: 8000 / my | Wykonuje metodę indeksu MyController.php | indeks |
http: // localhost: 8000 / my / create | Wykonuje metodę tworzenia MyController.php | Stwórz |
http: // localhost: 8000 / my / 1 | Wykonuje metodę show z MyController.php | pokazać |
http: // localhost: 8000 / my / 1 / edit | Wykonuje metodę edycji MyController.php | edytować |
Niejawne kontrolery
Niejawne kontrolery umożliwiają zdefiniowanie jednej trasy do obsługi każdej akcji w kontrolerze. Możesz to zdefiniować w pliku route.php za pomocąRoute:controller metoda, jak pokazano poniżej.
Route::controller(‘base URI’,’<class-name-of-the-controller>’);
Zastąp <class-name-of-the-controller> nazwą klasy, którą nadałeś kontrolerowi.
Nazwa metody kontrolera powinna zaczynać się od czasownika HTTP, takiego jak get lub post. Jeśli uruchomisz go za pomocą get, będzie obsługiwał tylko żądanie odbioru, a jeśli zacznie się od postu, obsłuży żądanie postu. Po czasowniku HTTP, który możesz, możesz nadać metodzie dowolną nazwę, ale powinna ona być zgodna z wersją identyfikatora URI dotyczącą wielkości liter.
Przykład
Step 1- Wykonaj poniższe polecenie, aby utworzyć kontroler. Zachowaliśmy nazwę klasyImplicitController. Możesz nadać klasie dowolną nazwę.
php artisan make:controller ImplicitController --plain
Step 2 - Po pomyślnym wykonaniu kroku 1, otrzymasz następujący wynik -
Step 3 - Skopiuj poniższy kod do
app/Http/Controllers/ImplicitController.php plik.
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
/**
* Responds to requests to GET /test
*/
public function getIndex() {
echo 'index method';
}
/**
* Responds to requests to GET /test/show/1
*/
public function getShow($id) {
echo 'show method';
}
/**
* Responds to requests to GET /test/admin-profile
*/
public function getAdminProfile() {
echo 'admin profile method';
}
/**
* Responds to requests to POST /test/profile
*/
public function postProfile() {
echo 'profile method';
}
}
Step 4 - Dodaj następujący wiersz do app/Http/routes.php plik, aby kierować żądania do określonego kontrolera.
app/Http/routes.php
Route::controller('test','ImplicitController');
Constructor Injection
Kontener usług Laravel służy do rozwiązywania wszystkich kontrolerów Laravel. W rezultacie możesz wskazać typ zależności, których kontroler może potrzebować w swoim konstruktorze. Zależności zostaną automatycznie rozwiązane i wprowadzone do instancji kontrolera.
Przykład
Step 1 - Dodaj następujący kod do app/Http/routes.php plik.
app/Http/routes.php
class MyClass{
public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
Step 2 - Dodaj następujący kod do
app/Http/Controllers/ImplicitController.php plik.
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
private $myclass;
public function __construct(\MyClass $myclass) {
$this->myclass = $myclass;
}
public function index() {
dd($this->myclass);
}
}
Step 3 - Odwiedź następujący adres URL, aby przetestować wstrzyknięcie konstruktora.
http://localhost:8000/myclass
Step 4 - Dane wyjściowe będą wyglądać tak, jak pokazano na poniższej ilustracji.
Metoda wtrysku
Oprócz iniekcji konstruktora możesz także wpisać - podpowiedź zależności od metod akcji kontrolera.
Przykład
Step 1 - Dodaj następujący kod do app/Http/routes.php plik.
app/Http/routes.php
class MyClass{
public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
Step 2 - Dodaj następujący kod do
app/Http/Controllers/ImplicitController.php plik.
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
public function index(\MyClass $myclass) {
dd($myclass);
}
}
Step 3 - Odwiedź następujący adres URL, aby przetestować wstrzyknięcie konstruktora.
http://localhost:8000/myclass
Wytworzy następujący wynik -