2012-02-18 33 views
17

Làm cách nào để lấy URL hiện tại từ mẫu Twig?Công cụ tạo mẫu Twig: nhận url hiện tại

Tôi đang sử dụng Twig với PHP, không có bất kỳ khung công tác nào khác.

+0

Tại sao không chuyển URL hiện tại dưới dạng biến mẫu? Hoặc bạn có thể viết một thẻ mẫu để xuất ra URL. –

Trả lời

6

Tìm URL hiện tại

URL hiện tại được cung cấp bởi máy chủ web của bạn và ghi vào $_SERVER siêu toàn cầu. Chạy tập lệnh nhỏ này, <?php echo '<pre>'; print_r($_SERVER);, thông qua máy chủ và thư mục gốc của bạn để tìm (các) giá trị bạn đang tìm kiếm.

câu hỏi liên quan về chủ đề này:

The PHP manual describes the nature of the available $_SERVER values here.

Bắt URL trong TWIG

Sau khi bạn có URL, bạn cần phải vượt qua nó như là một mẫu biến khi gọi render(...) trên mẫu dụ cành. Ví dụ, bạn có thể mã này.

$current_url = // figure out what the current url is 

// pass the current URL as a variable to the template 
echo $template->render(array('current_url' => $current_url)); 

Để sử dụng biến trong mẫu, bạn sử dụng cú pháp {{ variable_name }}.

+0

Tôi tự hỏi liệu có bất kỳ công cụ nội bộ nào (phương pháp biến ot) để lấy URL từ Twig không? – nKognito

+0

Bạn có thể tìm thấy một số mã đã được viết cho mục đích này, nhưng lấy URL hiện tại không nằm trong phạm vi của một công cụ mẫu, vì vậy tôi rất nghi ngờ Twig có bất cứ thứ gì được tích hợp sẵn. – erisco

0

Đây là thứ tôi tìm thấy để làm cho nó chung chung với Khung sliex. Tôi đoán giải pháp của tôi không hoàn hảo nhưng nó hoàn thành công việc.

trong mã PHP của bạn thêm mã này:

$app = new Silex\Application(); 
// add the current url to the app object. 
$app['current_url'] = $_SERVER['REQUEST_URI']; 

Sau đó, trong mẫu cành của bạn, bạn có thể làm

{{ app.current_url }} 

Hãy cho tôi biết dòng botom của phương pháp này là gì.

25

Các tác phẩm sau đây trong silex và chắc chắn nhất trong Symfony2 khi họ chia sẻ các lớp Yêu cầu (tôi đã không kiểm tra mặc dù):

{{ app.request.getRequestUri() }} 
+5

'{{app.request.requestUri}}' – eightyfive

+0

Thậm chí tốt hơn, vâng. – neemzy

+1

Nó không được dùng nữa, người ta không nên sử dụng nó. https://github.com/silexphp/Silex/issues/1257#issuecomment-141058724 – Tieme

2

Lưu ý thực hành tốt nhất, tại thời điểm này, bạn nên sử dụng Symfony\Component\HttpFoundation\RequestStack.

Xem http://symfony.com/blog/new-in-symfony-2-4-the-request-stack.

Tính đến Symfony 2.4, việc thực hành tốt nhất là không bao giờ tiêm dịch vụ theo yêu cầu, nhưng để tiêm dịch vụ request_stack thay vì [...]

Vì vậy, trong một ứng dụng silex nó có thể đạt được với :

app.request_stack.getCurrentRequest.getUri 
Các vấn đề liên quan