2012-03-17 39 views
9

Điều này stackoverflow solution gần như trả lời câu hỏi của tôi. Nhưng tôi muốn tạo các url CDN trong Twig không chỉ là tài nguyên. Tôi muốn tạo chúng cho nội dung động. Vì vậy, tôi không nghĩ rằng một tinh chỉnh Assetic là khu vực bên phải để được tìm kiếm.Symfony2/Twig: Tạo đường dẫn URL thay thế tuyệt đối để sử dụng với CDN?

Hiện tại, tôi có thể đặt CDN_url ở parameters.ini và sử dụng trong url của tôi. Mã của tôi sẽ trông như thế này: {{CDN_Url}}{{url('route',{'param1':'value'}} .. Mã bảo trì là một trong những lý do chính tôi không thích tùy chọn này. Sau đó, bạn có thể làm những việc như kiểm tra tuyến đường cho /cdn/ để tạo url CDN và mọi thứ khác dựa trên tên miền. Tôi sẽ không phải chạy xung quanh thay đổi nhiều biến. VÀ nếu tôi muốn ngừng tạo CDN. Tôi chỉ có thể sửa đổi tuyến đường. Vì vậy, có rất nhiều lợi ích để tìm ra nếu có một giải pháp sạch cho điều này.

Nếu chưa có giải pháp - làm cách nào tôi bắt đầu mở rộng chức năng {{ url() }} để tôi có thể sử dụng nó như pathurl.

+0

Bạn có trang web miền đa xây dựng trên symfony2 hoặc có nội dung trên CDN đã url động được định nghĩa bởi các tuyến đường symfony? –

+0

Cách hoạt động của CDN giống như có nhiều miền. cdn.domain.com/route mirror my.domain.com/route .. sử dụng Pull Origin. SO đôi khi, có lý do chính đáng để tải my.domain và các lần khác, như với phương tiện truyền thông, nó có ý nghĩa để tải cdn.domain. – JustinP

Trả lời

24

Bạn có thể làm điều đó với sự giúp đỡ của các câu hỏi mà bạn liên kết bằng cách làm theo cách

{{ asset(path('route',{'param1':'value'})) }} 

Nếu bạn cần phải xử lý nhiều tên miền CDN bạn có thể làm điều đó bằng cách làm theo cách

Trong app/config.yml

# app/config.yml 
#.... 
templating:  
    engines: ['twig'] 
    packages: 
    cdn1: 
     base_urls: ["http://cdn1.domain.com"] 
    cdn2: 
     base_urls: ["http://cdn2.domain.com"] 

Và sau đó trong tệp mẫu khuôn mẫu của bạn

{{ asset('path/of/file', 'cdn1') 

HOẶC

{{ asset('path/of/file', 'cdn2') 
+0

Tác phẩm này hoạt động ngay tức thì. Giải pháp của @Cerad rất tuyệt vời để bạn bắt đầu thực hiện một chức năng sạch hơn. – JustinP

+0

Trong Symfony 3.0, 'các gói' nên được lồng trong 'khung:' -> 'nội dung:'. – Jonathan

6

Tôi không biết về những thứ CDN nhưng như xa như mở rộng các chức năng url, hãy xem tại địa chỉ:

Symfony \ Cầu \ Twig \ Extension \ RoutingExtension

public function __construct(UrlGeneratorInterface $generator) 
{ 
    $this->generator = $generator; 
} 
public function getFunctions() 
{ 
    return array(
     'url' => new \Twig_Function_Method($this, 'getUrl'), 
     'path' => new \Twig_Function_Method($this, 'getPath'), 
    ); 
} 
public function getPath($name, $parameters = array()) 
{ 
    return $this->generator->generate($name, $parameters, false); 
} 

public function getUrl($name, $parameters = array()) 
{ 
    return $this->generator->generate($name, $parameters, true); 
} 

Vì vậy, bạn có thể nhận được tại getUrl ở đó hoặc bạn có thể chèn UrlGenerator của riêng bạn. Không chắc chắn sẽ dễ dàng hơn trong trường hợp cụ thể của bạn. Có thể tạo UrlGenerator của riêng bạn.

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