【发布时间】: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:谢谢,我搞定了!