2011-11-04 33 views
6

Trong Symfony 1 chúng ta có thể truy cập một hành động trong trang mẫu như ví dụ url_for('modulename/actionname') mà không cần viết gì trong routing.yml.symfony 2 tương đương với hàm url_for() trong symfony 1

làm thế nào điều này có thể có trong Symfony2 ?, đó là nếu tôi phải truy cập nhiều hơn một hành động trong một cành mà không chỉ định trong định tuyến. Điều này rất hữu ích khi sử dụng ajax.

Cảm ơn trước

Trả lời

3

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn đang yêu cầu làm thế nào bạn có thể tạo ra một url bằng cách thông qua một tên mô-đun và tên hành động, thay vì một tên đường. Có đúng không?

Tôi không nghĩ rằng điều này có thể xảy ra trong Symfony2. Nếu bạn nhìn vào phương pháp generate trong Symfony\Component\Routing\Generator\UrlGenerator, bạn sẽ thấy rằng nó dự kiến ​​tên của tuyến là tham số đầu tiên. Ngoài ra, Symfony2 không hỗ trợ các tuyến chung mà symfony 1 thực hiện (hiển thị bên dưới để tham khảo).

default_index: 
    url: /:module 
    param: { action: index } 

default: 
    url: /:module/:action/* 

Nếu không có các tuyến đường chung này, bạn không thể truy cập/myModule/myAction mà không thực sự xác định lộ trình cho nó. Và đừng quên rằng Symfony2 bây giờ sử dụng các bó, điều này sẽ làm phức tạp hơn nữa.

Vì vậy, đối với bất kỳ hành động nào bạn muốn truy cập, bạn sẽ cần viết các tuyến cho chúng.

Để thực sự tạo ra các URL ...
- Từ một bộ điều khiển: $this->generateUrl($routeName);
- Từ một mẫu PHP: $view['router']->generate($routeName);
- Từ một mẫu Twig: {{ path('_routeName') }} hoặc {{ url('_routeName') }} cho một URL tuyệt đối

+0

Cảm ơn bạn đã trả lời tuyệt vời. –

1

Ngoài ra để Arms' words, dưới đây là một vài ví dụ (có thông số):

Giả sử định tuyến của chúng tôi là:

#routing.yml 
acme_demo_page: 
    path: /{page}.{_format} 
    defaults: 
    _controller: AcmeDemoBundle:Page:index 

Chúng tôi sẽ tạo ra các URL cho việc định tuyến này, như sau:

Từ hành động của bất kỳ điều khiển:

$url = $view['router']->generate("acme_demo_page", array(
    "page" => "main", 
    "_format" => "html", 
)); 

Từ bất kỳ mẫu PHP:

$url = $this->generateUrl("acme_demo_page", array(
    "page" => "main", 
    "_format" => "html", 
)); 

Từ mẫu Twig bất kỳ:

<a href="{{ path('acme_demo_page', {page:'main', _format:'html'}) }}">Home</a> 
<a href="{{ url('acme_demo_page', {page:'main', _format:'html'}) }}">Abs Home</a> 


Hy vọng điều đó sẽ hữu ích.
Chúc mừng.