Механизм шаблонов пластин - расширение URI, такое же как у Twig 'pathFor'? - PullRequest
0 голосов
/ 01 июня 2018

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

Я вижу, что у Plates есть расширение под названием URI, которое я считаю синонимомс Twig's 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?Я ошибаюсь, что это в основном синоним расширения pathFor Twig?Должен ли я сдаться и просто использовать Twig?спасибо за ваш совет.

1 Ответ

0 голосов
/ 01 июня 2018

Вы можете использовать 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;
};
...