symfony 2路由模型 - php

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+…