@ber_enot
Веб-разработчик, Vue.js / Node.js

Роутинг в Slim: как передать объект $app в функцию класса?

Здравствуйте.

В документации к фреймворку не нашел, как привязать определенный метод (например, POST) к функции класса. Например, есть класс User, у него определяем функции get(), create(), update() и т.д., затем настраиваем роутинг: каждый метод на соответствующую ему функцию (GET->get(), POST->create() и т.д.) Как считаете, это вообще нормальная архитектура? Или как правильнее сделать?

На stackoverflow нашел такое решение:
$app->get('/', '\Pages:home');
То есть home это static-функция класса Pages. Но как тогда в ней использовать объект $app?

Примеров по разработке чего-нибудь на Slim не нашел, только с процедурной парадигмой..

PS. нужно написать RESTfull API.
  • Вопрос задан
  • 698 просмотров
Решения вопроса 1
@sl1m_dogg
не совсем понял суть вопроса, но по всей видимости $app можно достать из глобального скопа

еще вариант из документации, но лучше посмотреть подробнее описание аргументов
$app->get('/foo', function () use ($app) {
$app->render('foo.php'); // <-- SUCCESS
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Можно ещё вот так:

$app->get('/', '\SiteController:actionIndex');

класс \SiteController

class SiteController extends BaseController
{

    /**
     * @var
     */
    protected $ci;

    /**
     * @param Container $ci
     */
    public function __construct(Container $ci)
    {
        $this->ci = $ci;
    }

    /**
     * @param Request $request
     * @param Response $response
     * @param $args
     * @return \Psr\Http\Message\ResponseInterface|Response
     */
    public function actionIndex(Request $request, Response $response, $args)
    {
        /** @var \Slim\Views\PhpRenderer $renderer */
        $renderer = $this->ci->get('view');

        // some code

        return $response->withRedirect('/auth/');
    }

}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы