Plates Template Engine - расширение URI такое же, как у Twig 'pathFor'?

Я работаю над учебником по Slim framework. Автор использует Twig, и я бы предпочел использовать шаблонизатор Plates. Я мог модифицировать все уроки для использования шаблона Plates, пока автор не начал использовать расширения baseUrl и pathFor.

Я вижу, что у Plates есть расширение под названием URI, которое, как мне кажется, является синонимом Twig pathFor.

К сожалению, хоть убей, я не могу понять, как его включить. Читая документацию, я думал, что это сделает следующий код, но пока безуспешно.

require 'vendor/autoload.php';

$app = new Slim\App([
    'settings' => [
        'displayErrorDetails' => true
    ]
]);

$container = $app->getContainer();

$container['view'] = function ($container) {
    $plates = new League\Plates\Engine(__DIR__ . '/templates');
    $plates->loadExtension(new League\Plates\Extension\URI($_SERVER['PATH_INFO']));
    return $plates;
};

$app->get('/contact', function($request, $response) {
    return $this->view->render('contact');
});

$app->post('/contact', function($request, $response) {
    return $response->withRedirect('http://slim-local.com/contact/confirm');
})->setName('contact');

$app->get('/contact/confirm', function($request, $response) {
    return $this->view->render('contact_confirm');
});

$app->run();

Затем в шаблоне автор использовал расширение pathFor для заполнения параметра действия формы. Я пытаюсь использовать расширение URI Plates, чтобы сделать то же самое:

<form action = "<?=$this->uri('contact')?>" method = "post">

Кто-нибудь специально использовал этот шаблонизатор и расширение URI с Slim? Я ошибаюсь, что это в основном синоним расширения Twig pathFor? Должен ли я отказаться и просто использовать Twig? Спасибо за ваш совет.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
347
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать URI из окружения.

Пример Slim 3:

$container['view'] = function ($container) {
    $plates = new \League\Plates\Engine(__DIR__ . '/templates');

    $uri = \Slim\Http\Uri::createFromEnvironment(new \Slim\Http\Environment($_SERVER));
    $plates->loadExtension(new \League\Plates\Extension\URI($uri->__toString()));

    return $plates;
};

Потрясающие! Спасибо за быстрый и точный ответ. Не знаю, как я мог это понять самостоятельно, но, к счастью, есть много умных и полезных людей, таких как вы, в StackOverflow, которые могут помочь.

ConleeC 01.06.2018 23:59

Кстати, что делает __toString ()? Посмотрев немного сейчас, я ожидал, что мне понадобится использовать один из вариантов getPath, хотя я до сих пор не на 100% понимаю, ПОЧЕМУ и КАК все это работает.

ConleeC 02.06.2018 00:03
__нанизывать - это магический метод PHP. Этот метод вызывается, если вы хотите преобразовать объект в строку. Например: (string)$uri такой же, как это: $uri->__toString()
odan 04.06.2018 14:31

Другие вопросы по теме