Я работаю над учебником по 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? Спасибо за ваш совет.
Вы можете использовать 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;
};
Кстати, что делает __toString ()? Посмотрев немного сейчас, я ожидал, что мне понадобится использовать один из вариантов getPath
, хотя я до сих пор не на 100% понимаю, ПОЧЕМУ и КАК все это работает.
(string)$uri
такой же, как это: $uri->__toString()
Потрясающие! Спасибо за быстрый и точный ответ. Не знаю, как я мог это понять самостоятельно, но, к счастью, есть много умных и полезных людей, таких как вы, в StackOverflow, которые могут помочь.