问题
I'm going to use Symfony2 to sent periodically a newsletter to many users. I've to include a permalink to the HTML email for those who experience problems in reading them with an email client.
Anyway, assuming that i'm sending the newsletter this way:
// 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(/* .. */);
How can i construct the full URL (domain + controller + action + slug) to include it in a new email?
回答1:
With the router, of course
By default, the router will generate relative URLs (e.g.
/blog
). To generate an absolute URL, simply passtrue
to the third argument of thegenerate()
method:
Perhaps your code might look like this
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
);
回答2:
Update with 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
回答3:
TWIG
If this is within a twig template, use url('your route')
instead of path('your route')
to get the absolute URL.
来源:https://stackoverflow.com/questions/10621068/how-can-i-get-full-url-to-include-in-newsletter-sent-with-symfony2