2013-07-26 37 views
7

Đề cập đến này,Cách tạo tuyến đường trong symfony 2 để ánh xạ tới URL bên ngoài?

http://symfony.com/doc/current/book/routing.html

chúng ta có thể lập bản đồ mẫu url để điều khiển và hành động

app/config/routing.yml

blog_show: 
    path:  /blog/{slug} 
    defaults: { _controller: AcmeBlogBundle:Blog:show } 

Tôi muốn để lập bản đồ đường dẫn đến bên ngoài url.

app/config/routing.yml

blog_show: 
    path:  /blog/{slug} 
    defaults: "www.example.com/blog" 

Yêu cầu là, trang web hiện tại của tôi là trong Kohana, Tôi porting nó dần dần đến symfony 2. Đối với URL ứng dụng Kohana symfony2 của tôi cũng giống như các url bên ngoài, tôi muốn định cấu hình các url này trong định tuyến và sử dụng chúng theo cách tiêu chuẩn,

ví dụ: trong cành,

<a href="{{ path('blog_show'}}"> 
    Read this blog post. 
</a> 

Vì vậy, sau này khi tôi cổng trang của tôi để Symfony, tôi sẽ phải thay đổi chỉ tập tin định tuyến để tôi có thể sử dụng cùng một khóa blog_show để chỉ url, còn tôi wont' đã thay đổi tất cả các các tệp mà tôi đã sử dụng url.

+0

nếu bạn cần nhiều hơn cổ phiếu 'Chuyển hướng: urlRedirect' cung cấp (dưới dạng được mô tả bởi https://stackoverflow.com/a/22861229/719662), chỉ cần viết trình điều khiển của riêng bạn xử lý các chuyển hướng bằng cách kết hợp chức năng tùy chỉnh mà bạn cần (ví dụ:slugging) – vaxquis

Trả lời

-1

Tính năng định tuyến của Symfony không hoạt động theo cách đó ...

tôi đề nghị bạn tạo tiện ích Twig cho việc này. Đọc thêm về điều này tại đây: http://symfony.com/doc/current/cookbook/templating/twig_extension.html

Bạn có thể tạo hàm hoạt động rất giống với hàm url() thông thường, vì vậy bạn có thể di chuyển dễ dàng nhất có thể.

{{ legacyUrl('blog_post', {slug: 'my-blog-post'}) }} 

Sau khi bạn di chuyển blog sang Symfony, tất cả những gì bạn cần làm là tạo một tuyến đường có tên "blog_post" và thay đổi "legacyUrl" thành "url".

+0

Tôi muốn tránh thay đổi tất cả các tệp khuôn mẫu khi tôi chuyển tất cả các url bên ngoài của mình sang symfony. Tôi chỉ muốn thay đổi lộ trình. – vishal

+0

Bạn có thể cho hàm này một tên chung chung hơn, ví dụ: getUrl(). Sau khi di chuyển, bạn có thể điều chỉnh hàm đó để nó hoạt động giống như hàm url() mặc định. – Webberig

+0

thực sự, bộ định tuyến Symfony * làm * hoạt động theo cách đó - bạn có thể chuyển hướng hoặc trong bộ điều khiển của riêng bạn hoặc sử dụng một cổ phiếu (như https://stackoverflow.com/a/22861229/719662 mô tả) – vaxquis

-1

Dường như không có cách nào để Symfony xử lý vấn đề này.

+0

thực sự, có: https : //stackoverflow.com/a/22861229/719662 – vaxquis

8

Bạn có thể làm điều này bằng cách sử dụng một bộ điều khiển khung Symfony mặc dù tôi không chắc chắn cách này sẽ làm việc với các thông số:

blog_show: 
    path: /blog/{slug} 
    defaults: 
     _controller: FrameworkBundle:Redirect:urlRedirect 
     path: "http://example.com/blog" 
     permanent: true 

Lưu ý rằng path: /blog/{slug} grabs sên trực tiếp, nhưng path: "http://example.com/blog/{slug}" không hoạt động .

Nguồn: http://symfony.com/doc/current/cookbook/routing/redirect_in_config.html

+0

Một câu trả lời rất hữu ích - mặc dù tôi đã chỉnh sửa phần thứ hai vì nó không hoạt động như mô tả ('RedirectController.php' cho thấy không có điều khoản nào để tự xử lý các slugs). BTW: phương pháp này cũng hoạt động cho các chuyển hướng đường dẫn cục bộ đến các thư mục không được xử lý trực tiếp bởi Symfony (ví dụ: 'đường dẫn:"/some-local-path-to-a-directory "'). – vaxquis

0

Tính đến Symfony 2.2 này có thể bằng cách thêm các hạn chế chủ nhà để các tuyến đường:

routing.yml

user_homepage: 
    path: /path/to/whatever 
    host: "sub.domain.ext" 
    defaults: 
    _controller: forExampleAnyNamespaceBundle:Controller:action 

Có một bài viết trên blog chính thức về vấn đề này vấn đề: http://symfony.com/blog/new-in-symfony-2-2-url-host-support-in-the-routing

+1

đây không phải là điều OP hỏi về IMO – vaxquis

Các vấn đề liên quan