【问题标题】:Global URL parameter in SymfonySymfony 中的全局 URL 参数
【发布时间】:2015-11-21 11:08:06
【问题描述】:

我正在尝试将“全局”参数添加到我的路由中,如下所示:

/{foo_id}/controller/{another_id}/action

所以有一个 Foo 对象,它的 id 为 foo_id,所有请求中的所有控制器都使用它(主页除外)

我试图通过简单地向每条路由添加一个 foo_id 参数来实现这一点。但是我必须添加代码以将正确的 foo 加载到项目中的每个控制器,然后我必须确保用户也可以访问每个控制器中的 Foo。我找到了another similar question,所以我把路由改成了这样:

foo:
    resource: "@AppBundle/Resources/config/routing-foo.yml"
    prefix: /{foo_id}
    requirements:
        foo_id: \d+

我添加了一个被所有其他控制器继承的新控制器:

class BaseFooController extends Controller
{
    protected $foo;
    public function __construct()
    {
        $request = Request::createFromGlobals();
        $foo_id = $request->attributes->getInt('foo_id');
        // ... set $this->foo ...
    }
}

我的想法是我只能在所有其他控制器中使用 $this->foo 来访问 Foo 对象。我也可以在这个控制器中添加访问控制。但目前似乎无法访问 foo_id。

最好的方法是什么?

【问题讨论】:

  • 一种方法是使用事件。看看这章关于creating before and after filter。使用调度程序时,您可以访问当前路由及其参数。
  • @Artamiel:谢谢,我搞定了!

标签: php symfony routing


【解决方案1】:

我不知道如何使用 Symfony 2 框架来实现这一点。但是您可以制作一个简单的脚本,在正则表达式的帮助下分析您的 routing.yml 文件,并在每条路由的资源行之后添加行“prefix: /{foo_id}”。

【讨论】:

  • 这有什么帮助?我已经使用 /{foo_id} 前缀导入所有内容,因此我不需要脚本来执行此操作,但我不想添加代码以在每个控制器的每个函数中加载 Foo。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2011-12-12
相关资源
最近更新 更多