2014-04-21 40 views
1
我有,而在樹枝上的Symfony

Symfony的生成與後臺任務發送枝杈呈現電子郵件中的鏈接

這裏呈現的電子郵件生成路徑的一些問題

是我在做什麼

<a href="{{ domain_parameter ~ path('news_homepage') }}"> My Link </a> 

而上parameters.yml

domain_parameter: http://mydomain.com 

上的路由

news_homepage: 
    pattern: /news 
    defaults: { _controller: newsBundle:News:index } 
:用cron 210

然後我發郵件的任務

雖然這樣做,所以我希望得到的URL看起來像這樣:

http://mydomain.com/news 

,但我發現這一點:

http://mydomain.com/website.com/web/app.php/news 

如果我用「url」代替「path」,它會導致:

http://localhost/var/www/website.com/web/app.php/news 

你有什麼想法,我怎麼能得到這個按預期工作?感謝您提前

+0

你的.htaccess文件中有東西嗎?你爲默認路徑定義了什麼設置,以便在使用'path'命令時獲得'website.com/...'? – Javad

+0

Javad,在我的apache虛擬主機中,我將mydomain.com的「Root」定義爲綁定到文件夾/var/www/website.com/,我的Symfony項目是 –

+0

這是真的,但是如果您定義了「網站」。 com'作爲虛擬主機,那麼'path'命令不應該顯示'website.com/web/app.php/something',它應該只是打印'/ Symfony/web/app.php/something'。確保你在'config.yml'中的默認路徑有一個正確的配置 – Javad

回答

0

你不應該有網絡/ app.php在你的鏈接,那麼你可能想如果你想「只是有正確的域」在那裏,你可以嘗試改變你的htaccess

|頂替,如:

{{ path('news_homepage')|replace({'website.com': domain_parameter}) }} 
除了

,路徑()應該給你剛剛/新聞所以似乎有一些錯誤配置

+0

當我使用請求上下文在應用程序中生成鏈接時,實際上路徑工作的很好。唯一不起作用的情況是當我使用CRON路徑(因此沒有上下文請求)時,使用替換過濾器的解決方案是正確的,但是我想用它作爲最後的機會,我希望有一些「更乾淨」的東西,使用 –

+1

您也可以在您執行的命令中設置主機名: Symfony文檔爲您提供了一個解決方案: http://symfony.com/doc/current/cookbook/console/sending_emails.html 如同沒有正確的請求,您必須手動爲上下文提供正確的主機名,無論是通過配置還是將其設置在上下文對象中。所以你可以使用:$ this-> container-> get('router') - > getContext() - > setHost('myhostname'); –

+0

Bartlomiej,它仍然生成像http://mydomain.com/website.com/web/app.php/news路線,同時手動設置上下文的主機,因爲你建議我 –

0

賈瓦德的解決方案是最好的一個。

我最終創建了命令類而不是使用HTTP請求調用控制器。

要具有在命令中的每一個請求上下文,我指定此:

$requestCtx = $container->get('router')->getContext(); 
$requestCtx->setHost($container->getParameter('app_domain')); 
$requestCtx->setBaseUrl(''); 
$requestCtx->setScheme('http'); 

我也取代了所有「路徑」的功能(從我用來生成emailsà樹枝模板)由「URL 「現在可以通過指定的上下文生成預期的鏈接。