Получить URL-адрес в twig

#twig

#веточка

Вопрос:

Необходимо получить URL-адрес в шаблоне.

Я пробовал использовать get.request.url, но он всегда возвращает пустое значение. Я пробовал get.request.attributes.get(‘_route’), и он всегда возвращает пустое значение. Поскольку я новичок в twig, я уверен, что мне не хватает чего-то довольно простого и простого.

Комментарии:

1. Какой фреймворк вы используете или используете twig standalone?

2. twig standalone; это заставляет меня думать, что мне нужно сделать часть этого на php, а затем использовать twig, но это совсем не ясно.

Ответ №1:

Поскольку вы работаете с twig standalone, вам нужно будет передать информацию самостоятельно. Однако вы могли бы создать небольшой класс-оболочку, чтобы решить эту проблему за вас.

Request.php

 class Request {
    public function __construct() {}

    public function get($key) {
        return isset($_GET[$key]) ? $_GET[$key] : null;
    }

    public function post($key) {
        return isset($_POST[$key]) ? $_POST[$key] : null;
    }

    public function url() {
        $http = 'http'.(isset($_SERVER['HTTPS']) amp;amp; $_SERVER['HTTPS'] === 'on' ? 's': '');
        return  $http.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    }
}
 

И зарегистрируйте класс как глобальный в twig :

 <?php
    require_once __DIR__.'/vendor/autoload.php';
    $loader = new Twig_Loader_Filesystem(__DIR__.'/../views');
    $twig = new Twig_Environment($loader);
    $twig->addGlobal('request', new Request());
 

Теперь вы можете использовать свою обертку внутри twig

 {{ request.url }}{# output current url #}
{{ request.get('variable') }}{# contents of $_GET['variable'] when set or null #}
{{ request.post('variable') }}{# contents of $_POST['variable'] when set or null #}
 

Комментарии:

1. Спасибо миллион! Очень полезно получить URL-адрес для моего приложения, и до сих пор не было никакой информации о том, как это сделать!