感謝截至/喬恩的意見,我已經設法現在解決這個問題。工廠修復沒有工作,因爲在實例化用戶類時,沒有任何過濾器已經運行,因此我留下了一個無用的用戶對象。
我解決我的問題,簡單地採取幾乎所有的代碼在我的自定義路由類的matchesUrl()函數,並在一個新的功能doRouting把()在同一個班級。 matchesUrl()現在看起來是這樣的:
public function matchesUrl($url, $context = array())
{
if (false === $parameters = parent::matchesUrl($url, $context))
{
return false;
}
$parameters['module'] = 'content';
$parameters['action'] = 'route';
$this->url = $url;
$this->context = $context;
return $parameters;
}
和路由延遲到通過我的「內容」模塊/控制器工廠和過濾器後:
class contentActions extends sfActions
{
public function executeRoute(sfWebRequest $request)
{
$router = $this->getRoute();
$router->doRouting($router->url, $router->context);
}
而且doRouting()函數現在直接轉發到適當的模塊/操作(正確考慮用戶權限)。
來源
2010-08-26 15:22:54
Tom
也許sfContext尚未初始化。你可以看看initialize()和loadFactories()(或類似的)。 – Till 2010-08-26 11:59:17
sfContext被初始化(我使用$ context-> hasInstance()來檢查)。我嘗試了「if($ user === null)$ context-> loadFactories()」,但是它將它發送到遞歸循環中,因此它必須是loadFactories,它將啓動路由進程。 – Tom 2010-08-26 14:19:03
你在使用sfGuard嗎? – jgallant 2010-08-26 14:23:17