Как я могу получить полный URL-адрес для включения в информационный бюллетень, отправляемый с помощью Symfony2?

Я собираюсь использовать Symfony2 для периодической рассылки новостей многим пользователям. Я должен включить постоянную ссылку на электронное письмо в формате HTML для тех, у кого возникают проблемы с чтением их с помощью почтового клиента.

Во всяком случае, если предположить, что я отправляю информационный бюллетень таким образом:

// Assume success and create a new SentMessage to store and get permalink
$sent = new SentMessage();

$sent->setRecipients(/* ... */);
$sent->setSubject(/* ... */);
$sent->setContent(/* ... */);

// Get the slug for the new sent message
$slug = $sent->getSlug(); // Like latest-product-offers-546343

// Construct the full URL
// e.g. http://mydomain.com/newsletter/view/latest-product-offers-546343

// Actually send a new email
$mailer->send(/* .. */);

Как я могу создать полный URL-адрес (домен + контроллер + действие + ярлык), чтобы включить его в новое электронное письмо?


person gremo    schedule 16.05.2012    source источник


Ответы (3)


Конечно, с маршрутизатором.

По умолчанию маршрутизатор будет генерировать относительные URL-адреса (например, /blog). Чтобы сгенерировать абсолютный URL, просто передайте true в третий аргумент метода generate():

Возможно, ваш код может выглядеть так

Symfony2

$url = $router->generate(
    'slug_route_name',
    array('slug' => $sent->getSlug()),
    true // This guy right here
);

Symfony3

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

$url = $router->generate(
    'slug_route_name',
    array('slug' => $sent->getSlug()),
    UrlGeneratorInterface::ABSOLUTE_URL // This guy right here
);
person Peter Bailey    schedule 16.05.2012
comment
Удивительно. Так много времени, чтобы изучить Sf2 и никогда не слышал о полной генерации URL. Спасибо, Петр, ты всегда нам помогаешь. - person gremo; 16.05.2012
comment
Замечательно. Спасибо. - person ntuan16; 14.11.2013

Обновление с Symfony 3:

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

$this->generateUrl('blog_show', array('slug' => 'my-blog-post'), UrlGeneratorInterface::ABSOLUTE_URL);
// http://www.example.com/blog/my-blog-post
person ArGh    schedule 09.03.2016

ТВИГ

Если это внутри шаблона ветки, используйте url('your route') вместо path('your route'), чтобы получить абсолютный URL-адрес.

person Baig    schedule 13.01.2015