Любой запрос MVC-приложения проходит через контроллер. Кроме вывода информации на экран, за что отвечают элементы представлений и задач связанных с данными, за что отвечают классы моделей, существует множество других задач, с которыми приходится сталкиваться программисту в процессе написания кода. Для решения остальных задач предназначен контроллер.
Шаблон разработки задач с использованием контроллера:
- Создать контроллер.
- Создать для него экшн (это метод , который выводит view() либо перенаправление redirect()).
- Создать для экшн элемент представления(ий). (При необходимости)
- Создать маршрут для экшна.
После прохождения этих этапов, остается выполнить запрос, и насладиться полученным результатом, либо ошибкой :)
Прежде всего, контроллер - это класс, содержащий экшны. Поэтому контроллер не содержащий методов с выводом (экшнов) - это пустой бессполезный класс.
Контроллеры хранятся в папке app/http/controllers/.
Все контроллеры должны наследовать класс Controller. Файл класса Controller.php также может в папке app/http/controllers, и в него можно поместить общую логику для всех остальных контроллеров.
Создаем контроллер:
php artisan make:controller BaseController
Artisan создаст пустой класс с именем BaseController.
namespace App\Http\Controllers; use Illuminate\Http\Request; class BaseController extends Controller { }
Обратите внимание на namespace (пространство имен) в начале файла. Пространство имен определяет путь к папке, в которой находится файл класса.
Контроллер - это класс, который должен содержать хотя бы один экшн. В свою очередь, экшн - это метод (или функция класса), который выводит элемент представления, либо перенаправление. Простейший экшн может выводить ответ сразу на экран (например, с помощью конструкции echo). Добавим экшн index();
namespace App\Http\Controllers; use Illuminate\Http\Request; class BaseController extends Controller { public function index(){ echo 'Ok'; } }
После разработки экшна, вызовем его через маршрутизатор (в файле /routes/web.php):
Route::get('/', 'BaseController@index');
Далее возвращаемся в контроллер, и вместо echo
вызываем шаблон welcome.blade.php
public function index(){ return view('welcome'); }