2013-01-18 40 views
5

Tôi tự hỏi làm thế nào để có được tên trang hiện tại, về cơ bản 'chỉ' tham số cuối cùng trong tuyến đường (tức là/tin tức hoặc/về). Tôi đang làm điều này vì tôi muốn có thể có trang hiện tại trong điều hướng được đánh dấu.Cách lấy tên trang hiện tại trong Silex

Lý tưởng nhất, tôi muốn lưu trữ tên trang hiện tại trong một biến toàn cầu để trong Twig tôi chỉ có thể so sánh tên trang hiện tại với liên kết và thêm lớp cho phù hợp.

Tôi không thể tìm ra cách thêm tên trang hiện tại vào biến toàn cục. Tôi đã thử sử dụng một cái gì đó như thế này:

$app['twig']->addGlobal('current_page_name', $app['request']->getRequestUri()); 

ở đầu tệp app.php của tôi, nhưng lỗi 'ngoài phạm vi yêu cầu'. Nhưng tôi không muốn bao gồm điều này trong mọi tuyến đường.

Cách tốt nhất để làm điều này là gì?

Trả lời

15

Nếu bạn đặt nó vào một ứng dụng cấp trước middleware như thế này, mà sẽ làm việc:

$app->before(function (Request $request) use ($app) { 
    $app['twig']->addGlobal('current_page_name', $request->getRequestUri()); 
}); 

Các "tên trang" một phần của câu hỏi của bạn không rõ ràng, Bạn đang tìm kiếm tên các tuyến đường hiện tại của ? Bạn có thể truy cập thông qua $request->get("_route") ngay cả trong phần mềm trung gian trước, vì nó được gọi khi định tuyến đã được thực hiện.

+0

Cảm ơn, hoạt động tuyệt vời! Tôi đã cập nhật câu hỏi của mình để giải thích rõ hơn ý của tôi. – Pete

1

Bạn cũng có thể tạo danh sách điều hướng trực tiếp trong mẫu cành điều hướng độc lập. Và sau đó nhập nó vào mẫu chính. Sau đó, bạn sẽ chỉ phải nhận được silex để chuyển đến khung nhìn định danh trang hiện tại. Cách đơn giản nhất ... ví dụ từ Silex bạn sẽ phải vượt qua biến "đường dẫn" để xem của bạn. Có lẽ sẽ thuận tiện hơn khi tìm nạp nav_list từ cơ sở dữ liệu và chuyển nó vào mẫu twig dưới dạng biến mảng toàn cầu thay thế. Tuy nhiên ví dụ này là đơn giản nhất bạn có thể làm được những gì bạn dự định.

nav.twig

{% set nav_list = [ 
    ["./",  "home"], 
    ["./contact", "contact"], 
    ["./about", "about us"] 
    {# ... #} 
] %} 

{% set link_active = path|default("") %} 

{% for link in nav_list %} 
    <li><a href="{{ link[0] }}" class="{% if link[0] == link_active %} activeClass {% endif %}" >{{ link[1] }}</a></li> 
{% endfor %} 

app.php

//... 
    $app->match('/about', function (Request $request) use ($app) { 
     return $app['twig']->render('about.twig', array(
      'path' => './'.end(explode('/', $request->getRequestUri())) 
     )); 
    }); 
//... 
Các vấn đề liên quan