Sf2.0,例如标准博客。
routing.yml代码:
DevBlogBundle_post_show:
pattern: /posts/{id}
defaults: { _controller: "DevBlogBundle:Post:show" }
requirements:
_method: GET
id: \d+
我使用以下方法为我的帖子生成url的标准方法:
path('DevBlogBundle_post_show',{'id':post.id})
我在所有的模板/布局(包括帖子列表)中都使用了这种构造。如果我想更改post_show的路线(例如,添加Slug参数/posts/{id}.{slug}),则需要更改所有模板。相反,我想通过我的Post模型生成路线,例如:
public function getUrl(){
return $this->generator->generate('DevBlogBundle_post_show',array (...params...));}
问题:如何将“生成器”添加到我的Post模型中,我必须“使用...”以及如何生成路线?
我想在模板中放置:
<a href="{{ post.getUrl() }}" ...>...</a>
提前致谢。
参考方案
对此问题和我以前的评论中的想法感到兴奋,我共同构思了一个快速的概念证明,以实现您所要求的目标。我已经实现了一个树枝函数,可以将其传递给实体和路线名称。该函数执行以下setps来生成url:
获取按名称指定的路线
编译路线
获取路线变量
遍历变量,并尝试在实体上调用相应的getter来构建UrlGeneratorInterface生成路由url所需的parameters数组
让symfony的网址生成器生成网址
但是,这意味着route参数的名称必须与实体中的属性完全相同,恕我直言,这还是一个好习惯。该代码需要放入树枝扩展中,该扩展具有将服务容器引用注入到容器属性中的功能。
public function generateEntityUrl($entity,$routeName)
{
$router = $this->container->get('router');
$generator = $router->getGenerator();
$collection = $router->getRouteCollection();
$route = $collection->get($routeName);
$compiledRoute = $route->compile();
$variables = $compiledRoute->getVariables();
$parameters = array();
foreach($variables as $var)
{
$getter = 'get'.ucfirst($var);
$parameters[$var]=$entity->$getter();
}
return $generator->generate($routeName,$parameters);
}
然后,可以在树枝中使用{{post|entity_url('DevBlogBundle_post_show')}}
调用该函数。
但是我在问自己,为什么symfony中还没有实现……或者为什么我还没有找到实现。
Symfony 2:如何通过路由名称获取默认路由? - php是否可以通过名称检索有关某条路线的信息,或获取所有路线的列表?我需要能够获取任意路径的_controller中的defaults值,而不仅仅是当前路径。这有可能吗?P.S .:我发现我可以找到使用YAML的路由,但是重新解析似乎是不必要且繁重的。 参考方案 我真的很擅长回答自己的问题。要获取路由,请在路由器上(控制器内的getRouteCollection(…
原则实体管理器和多线程更新数据库 - php我目前有一个XHR请求,可以从客户端启动N次。该请求由服务器处理,每个请求通常在数据库中创建一个新行(所有原则/ xml)。在我对对象进行persist()之前,请确保是否具有唯一的文件名(我正在上传资产),并且通过重写persist(),调用我的getUniqueFilename()然后调用parent :: persist来做到这一点。当我执行多个带有相…
如何从Symfony的HttpFoundation组件检索基本身份验证凭据? - php我想从Symfony的HttpFoundation组件中检索基本的身份验证凭据。粗略地看文档并没有发现任何东西。有办法吗?(我在不基于Symfony框架的应用程序中使用HttpFoundation组件。) 参考方案 可以通过$_SERVER['PHP_AUTH_USER']实例以下列方式访问$_SERVER['PHP_AUTH_…
在Symfony中键入提示json对象 - php在我的Symfony 2.3项目中,我有一个curl函数,该函数从API接收JSON数据,并将该数据作为参数传递给另一个函数。当前,接受JSON对象的函数如下所示:public function updateCountries($data) { foreach (json_decode($data, true) as $key => $value) {…
php Singleton类实例将在多个会话中保留吗? - php举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…