[英]Is it possible to make the default parameter values for routes dynamic in symfony2?
我有一個使用注釋在symfony2控制器中定義的路由。 例如:
@Route("/{year}", name="show_list_for_user", defaults={ "year" = "2012" })
是否可以使默認年份動態化。 也許從服務對象中讀取年份?
您可以在RequestContext中設置默認參數。
當Symfony生成URL時,它按以下順序使用值:
請參閱Symfony\\Component\\Routing\\Generator\\UrlGenerator::doGenerate
:
$mergedParams = array_replace($defaults,
$this->context->getParameters(),
$parameters);
您可以在請求事件偵聽器中設置上下文參數以覆蓋Route默認值:
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Routing\RouterInterface;
class RequestListener
{
private $_router;
public function __construct(RouterInterface $router)
{
$this->_router = $router;
}
public function onRequest(GetResponseEvent $event)
{
$context = $this->_router->getContext();
if (!$context->hasParameter('year')) {
$context->setParameter('year', date('Y'));
}
}
}
服務配置:
<service id="my.request_listener"
class="MyBundle\EventListener\RequestListener">
<argument id="router" type="service"/>
<tag name="kernel.event_listener"
event="kernel.request" method="onRequest" />
</service>
這取決於一個用例,如果你想使用動態默認生成url,請使用上面的代碼。 如果希望控制器在執行操作之前動態選擇正確的默認值,則可能使用“kernel.controller”事件並設置請求屬性(如果不存在)。
這是不可能的,但確實存在變通方法。 創建一個處理默認情況的附加控制器。
/**
* @Route("/recent", name="show_recent_list_for_user")
*/
public function recentAction()
{
$response = $this->forward('AcmeDemoBundle:Foo:bar', array(
'year' => 2012,
));
return $response;
}
/**
* @Route("/recent", name="show_recent_list_for_user")
*/
public function recentAction()
{
$response = $this->redirect($this->generateUrl('show_list_for_user', array(
'year' => 2012,
)));
return $response;
}
我擔心這是不可能的,默認是靜態的。
用作默認的占位符,類似於
defaults={ "year" = "CURRENT_YEAR" }
然后在你的控制器做類似的事情:
if ($year == "CURRENT_YEAR") {
$year = //do something to find the current year
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.