Учебники

Laravel — Контроллеры

В рамках MVC буква «C» обозначает контроллер. Он действует как трафик между представлениями и моделями. В этой главе вы узнаете о контроллерах в Laravel.

Создание контроллера

Откройте командную строку или терминал в зависимости от используемой операционной системы и введите следующую команду, чтобы создать контроллер с помощью Artisan CLI (интерфейс командной строки).

php artisan make:controller <controller-name> --plain

Замените <имя-контроллера> на имя вашего контроллера. Это создаст простой конструктор при передаче аргумента — обычный . Если вы не хотите создавать простой конструктор, вы можете просто проигнорировать аргумент. Созданный конструктор можно увидеть в app / Http / Controllers .

Вы увидите, что базовое кодирование для вас уже сделано, и вы можете добавить свой собственный код. Созданный контроллер может быть вызван из rout.php по следующему синтаксису.

Синтаксис

Route::get(‘base URI’,’controller@method’);

пример

Шаг 1 — Выполните следующую команду, чтобы создать UserController .

php artisan make:controller UserController --plain

Шаг 2 — После успешного выполнения вы получите следующий вывод.

UserController

Шаг 3 — Вы можете увидеть созданный контроллер в app / Http / Controller / UserController.php с некоторой базовой кодировкой, уже написанной для вас, и вы можете добавить свою собственную кодировку в зависимости от ваших потребностей.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   //
}

Промежуточное ПО контроллера

Мы уже видели промежуточное программное обеспечение, и его можно использовать и с контроллером. Промежуточное программное обеспечение также может быть назначено на маршрут контроллера или в конструкторе вашего контроллера. Вы можете использовать метод промежуточного программного обеспечения для назначения промежуточного программного обеспечения контроллеру. Зарегистрированное промежуточное программное обеспечение также может быть ограничено определенным методом контроллера.

Назначение промежуточного программного обеспечения для маршрута

Route::get('profile', [
   'middleware' => 'auth',
   'uses' => 'UserController@showProfile'
]);

Здесь мы назначаем промежуточное ПО авторизации для UserController в профиле маршрута.

Назначение промежуточного программного обеспечения в конструкторе контроллера

<?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');
   }
}

Здесь мы назначаем промежуточное ПО аутентификации, используя метод промежуточного ПО в конструкторе UserController .

пример

Шаг 1 — Добавьте следующие строки кода в файл app / Http / rout.php и сохраните его.

routes.php

<?php
Route::get('/usercontroller/path',[
   'middleware' => 'First',
   'uses' => 'UserController@showPath'
]);

Шаг 2 — Создайте промежуточное программное обеспечение под названием FirstMiddleware , выполнив следующую строку кода.

php artisan make:middleware FirstMiddleware

Шаг 3 — Добавьте следующий код в метод handle недавно созданного FirstMiddleware в 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);
   }
}

Шаг 4 — Создайте промежуточное программное обеспечение под названием SecondMiddleware , выполнив следующую команду.

php artisan make:middleware SecondMiddleware

Шаг 5 — Добавьте следующий код в метод handle недавно созданного SecondMiddleware в 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);
   }
}

Шаг 6 — Создайте контроллер с именем UserController , выполнив следующую строку.

php artisan make:controller UserController --plain

Шаг 7. После успешного выполнения URL вы получите следующий вывод:

UserController1

Шаг 8 — Скопируйте следующий код в файл app / Http / UserController.php .

приложение / 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;
   }
}

Шаг 9 — Теперь запустите внутренний веб-сервер php, выполнив следующую команду, если вы еще не выполнили ее.

php artisan serve

Шаг 10 — Посетите следующий URL.

http://localhost:8000/usercontroller/path

Шаг 11 — Вывод будет выглядеть, как показано на следующем рисунке.

UserController2

Restful Resource Controllers

Часто при создании приложения нам необходимо выполнять операции CRUD (создание, чтение, обновление, удаление) . Laravel облегчает нам эту работу. Просто создайте контроллер, и Laravel автоматически предоставит все методы для операций CRUD. Вы также можете зарегистрировать единый маршрут для всех методов в файле rout.php.

пример

Шаг 1 — Создайте контроллер MyController , выполнив следующую команду.

php artisan make:controller MyController

Шаг 2 — Добавьте следующий код в

Файл app / Http / Controllers / MyController.php .

приложение / Http / Контроллеры / 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';
   }
}

Шаг 3 — Добавьте следующую строку кода в файл app / Http / rout.php .

приложение / Http / routes.php

Route::resource('my','MyController');

Шаг 4 — Теперь мы регистрируем все методы MyController, регистрируя контроллер с ресурсом. Ниже приведена таблица действий, выполняемых контроллером ресурсов.

глагол Дорожка действие Название маршрута
ПОЛУЧИТЬ / мой индекс my.index
ПОЛУЧИТЬ / Мой / создать Создайте my.create
СООБЩЕНИЕ / мой хранить my.store
ПОЛУЧИТЬ /мой мой} шоу my.show
ПОЛУЧИТЬ / Мой / {мой} / редактировать редактировать my.edit
PUT / PATCH /мой мой} Обновить my.update
УДАЛЯТЬ /мой мой} уничтожить my.destroy

Шаг 5 — Попробуйте выполнить URL-адреса, показанные в следующей таблице.

URL Описание Выходное изображение
HTTP: // локальный: 8000 / мой Выполняет индексный метод MyController.php индекс
HTTP: // локальный: 8000 / мой / создать Выполняет метод создания MyController.php Создайте
HTTP: // локальный: 8000 / меня / 1 Выполняет метод показа MyController.php шоу
HTTP: // локальный: 8000 / мой / 1 / редактировать Выполняет метод редактирования MyController.php редактировать

Неявные контроллеры

Неявные контроллеры позволяют вам определять один маршрут для обработки каждого действия в контроллере. Вы можете определить его в файле route.php с помощью метода Route: controller, как показано ниже.

Route::controller(‘base URI’,’<class-name-of-the-controller>’);

Замените <class-name-of-the-controller> на имя класса, которое вы дали своему контроллеру.

Имя метода контроллера должно начинаться с HTTP-глагола, как get или post. Если вы начнете с get, он будет обрабатывать только запрос get, а если он начинается с post, он будет обрабатывать запрос post. После того, как вы можете использовать HTTP-глагол, вы можете дать любое имя методу, но оно должно соответствовать версии URI в заглавном случае.

пример

Шаг 1 — Выполните приведенную ниже команду, чтобы создать контроллер. Мы сохранили имя класса ImplicitController . Вы можете дать любое имя на ваш выбор.

php artisan make:controller ImplicitController --plain

Шаг 2 — После успешного выполнения шага 1 вы получите следующий вывод —

Implicitcontroller

Шаг 3 — Скопируйте следующий код в

Файл app / Http / Controllers / ImplicitController.php .

приложение / Http / Контроллеры / 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';
   }
}

Шаг 4 — Добавьте следующую строку в файл app / Http / rout.php, чтобы направить запросы на указанный контроллер.

приложение / Http / routes.php

Route::controller('test','ImplicitController');

Конструктор Инъекция

Сервисный контейнер Laravel используется для разрешения всех контроллеров Laravel. В результате вы можете напечатать любые зависимости, которые могут понадобиться вашему контроллеру в его конструкторе. Зависимости будут автоматически разрешены и введены в экземпляр контроллера.

пример

Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .

приложение / Http / routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Шаг 2 — Добавьте следующий код в

Файл app / Http / Controllers / ImplicitController.php .

приложение / Http / Контроллеры / 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);
   }
}

Шаг 3 — Посетите следующий URL, чтобы проверить внедрение конструктора.

http://localhost:8000/myclass

Шаг 4 — Вывод будет выглядеть, как показано на следующем рисунке.

Мои занятия

Инъекция метода

В дополнение к внедрению в конструктор, вы также можете ввести — подсказки зависимости от методов действия вашего контроллера.

пример

Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .

приложение / Http / routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Шаг 2 — Добавьте следующий код в

Файл app / Http / Controllers / ImplicitController.php .

приложение / Http / Контроллеры / 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);
   }
} 

Шаг 3 — Посетите следующий URL, чтобы проверить внедрение конструктора.

http://localhost:8000/myclass

Это даст следующий результат —