PHP Slim Framework Создать контроллер

Я создаю API, используя платформу Slim. В настоящее время я использую один файл для создания маршрута и пропускаю его:

$app->get('/', function($req, $resp){ //Code... }) 

Но я понимаю, что мой файл быстро растет. То, что я хочу сделать, это использовать контроллеры вместо этого, поэтому у меня будет класс контроллера и просто передайте методы экземпляра / статики на маршрут, как показано ниже

 class HomeController { public static function index($req, $resp){} } 

а затем передать функцию на маршрут

 $app->get('/', HomeController::index); 

Я пробовал это, но это не работает, и мне интересно, есть ли способ, которым я могу использовать его для управления моими файлами.

    Поверните контроллер в функтор:

     class HomeController { public function __invoke($req, $resp) {} } 

    и затем выполните следующие действия:

     $app->get('/', HomeController::class); 

    Для справки см.

    PHP 5.6 Slim 2.6.2

     require 'vendor/autoload.php'; class HelloController { public static function index() { global $app; echo "<pre>"; var_dump($app->request); echo "</pre>"; } } $app = new \Slim\Slim(); $app->get('/', 'HelloController::index'); $app->run(); 

    Обновление: PHP 5.6 Slim 3.0.0

     require 'vendor/autoload.php'; class HelloController { public static function hello(\Slim\Http\Request $req, \Slim\Http\Response $response, $args) { echo "<pre>"; var_dump($args); echo "</pre>"; } } $app = new \Slim\App(); $app->get('/hello/{name}', 'HelloController::hello'); $app->run(); 

    Проблема с маршрутизацией на основе классов в Slim 3.0 – это доступ к $this / $app . Я думаю, вам нужно будет использовать global $app для доступа к нему.

    В моем домашнем проекте я использую группы маршрутов с require_once . Что-то вроде

     $app->group('/dashboard', function () { $this->group('/auctions', function () use ($app){ require_once('routes/dashboard/auctions.php'); }); $this->group('/rss', function () { require_once('routes/dashboard/rss.php'); }); $this->group('/settings', function () { require_once('routes/dashboard/settings.php'); }); }); 

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

    Быстрый маршрут Nikic – это очень минимальный маршрутизатор, поэтому некоторые из тонкостей больших фреймворков удалены. Вот базовое решение:

    routes.php

     use \Psr\Http\Message\ServerRequestInterface as Request; use \Psr\Http\Message\ResponseInterface as Response; $app->get('/', function($req, $resp, $args) use ($app){return FooBar::asdf($app, $req, $resp);}); 

    использование контроллера \ Psr \ Http \ Message \ ServerRequestInterface в качестве запроса; использовать \ Psr \ Http \ Message \ ResponseInterface как ответ;

     class FooBar{ static public function asdf(Slim\App $app, Request $req, Response $resp, $args = []) { return $resp->withJson(['asf']); } }