2012-02-29 21 views
16

Tôi hiện đang viết một công cụ bản tin và do đó phải tạo URL tuyệt đối trong tập lệnh CLI được gọi qua cron.Symfony2: cách đặt url máy chủ/cơ sở trong tập lệnh CLI

Thật không may lệnh CLI của Symfony không biết gì về host/base_url của tôi, do đó router tạo URL tuyệt đối với sai base_url. Nó luôn sử dụng http://localhost làm cơ sở.

Có cách nào để thông báo cho router chính xác base_url không?

Mã của tôi:

$this->container->get('router')->generate($route, $parameters, true); 

Trả lời

26

Bạn có thể làm điều đó theo cách này:

$host = $this->getContainer()->getParameter('host'); 
$this->getContainer()->get('router')->getContext()->setHost($host); 

Tương tự như vậy bạn có thể đặt baseurl và Đề án:

$this->getContainer()->get('router')->getContext()->setScheme('https'); 
$this->getContainer()->get('router')->getContext()->setBaseUrl('/web'); 
+0

công trình như nó nên. cảm ơn :) – stoefln

+0

Tôi cũng cần chức năng này và vì nó có thể cần thiết ở nhiều trang web mà tôi đã tạo một gói: http://packagist.org/packages/frosas/base-url-bundle –

+3

Bạn có thể định cấu hình trên toàn cầu này trong '' 'parameters.yml'''. Nó sẽ chỉ được thực hiện cho các yêu cầu không phải web vì vậy không cần phải lo lắng về các tuyến đường "thực sự" của bạn bị ảnh hưởng bởi điều này. Tham khảo: [Cấu hình bối cảnh yêu cầu trên toàn cầu] (http://symfony.com/doc/2.3/cookbook/console/sending_emails.html#configuring-the-request-context-globally). – flu

1

$host = $this->container->getParameter('host'); $this->container->get('router')->getContext()->setHost($host);

13

Kể từ 2.1 bạn có thể cấu hình các tham số mặc định của router, đây có lẽ là cách tiếp cận tốt nhất. Một kịch bản CLI sẽ sử dụng các thông số mặc định, tuy nhiên một yêu cầu web sẽ ghi đè lên chúng:

# app/config/parameters.yml 
parameters: 
    router.request_context.host: example.org 
    router.request_context.scheme: https 
    router.request_context.base_url: my/path 

Để biết thêm chi tiết, xem How to Generate URLs and Send Emails from the Console

+1

Điều này dường như không hoạt động trong Symfony 3 cho tôi. Bạn có muốn biết liệu nó có hoạt động trong SF3 không? – conradkdotcom

+0

Trong thực tế công việc này trong SF3 nhưng nó không phải app/config/parameters.yml nhưng app/config/services.yml – LedZelkin

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