Это просто пример. Разумеется в приложениях с хоть какой-то логикой никто не пишет callback'и в файле роутинга. Для быстрого теста вариант приемлемый.
На самом деле Laravel/Lumen под капотом используют тот же fastroute, что и slim.
Artem Moseev, Я просто не догнал почему надо засовывать контроллер в контейнер. Возможно для того чтобы передать в него обьект контейнера. Но зачем если мы всёравно передаем контейнер через конструктор в вызываемой функции
<?php
namespace App\Controllers;
class UserController{
private $container = null;
public function __construct($container) {
$this->container = $container;
}
public function listUsers($request, $response){
return $this->container->view->render($response, 'home.twig');
}
}
semki096, Вообще в контроллер не нужно контейнер передавать. В идеале ваше приложение вообще не должно зависеть от контейнера. https://github.com/PHP-DI/Slim-Bridge - вот хороший пример. Контейнер создает контроллер на основе рефлексии. А код вашего приложения не использует контейнер и вообще о нем не знает.
Artem Moseev, посмотрел, это более сложный вариант для моего понимания. Хочу пока разобраться с коробочным функционалом. В контроллер не нужно контейнер передавать - это я кажется понял, но к примеру https://www.codecourse.com/lessons/slim-3-authenti... вариант когда передают в конструктор. Правильно ли это?
semki096, Передавать контейнер в слой контроллеров и уж тем более бизнес логики не правильно. Но так делают даже в крупных реальных проектах, которые приносят миллионы. Все зависит от ваших навыков. Если вы сейчас обучаетесь - продолжайте получать результат(но с оглядкой на рекомендации). С другой стороны, если вы столкнетесь с проблемами, возникшими в результате внедрения контейнера в контроллер - этот опыт тоже пойдет вам в плюс. Только сомневаюсь, что в домашних проектах вы с этим столкнетесь. Ведь все эти ограничения возникли для упрощения разработки и поддержки проектов одновременно несколькими десятками людей несколько лет.
semki096, Ну да, только в первом варианте вы должны подсказать контейнеру как создать объект UserController ( если конструктор UserController не пустой). И так для каждого контроллера. А второй вариант для ленивых - отдаем сразу контейнер и там уже получим что захотим.