2012-04-23 45 views
0

我在symfony应用程序中实现了向导式过程。它有'后'和'下'的额外按钮,并且我控制了每个表单提交后用户指向的页面。Symfony安全 - 控制哪些路由可访问

我希望在用户处于向导模式时如何锁定路由,也就是说,如果在向导模式下,他们只能访问向导过程中使用的5个页面。如果他们尝试在向导模式下导航到其他路由,则会重定向到向导所在的最后一个已知路由。

我可以进入每个操作并在向导模式下添加重定向,但这看起来像是错误的方法。

+0

我认为你应该使用[过滤器](http://www.symfony-project.org/gentle-introduction/1_4/en/06-Inside-the-Controller-Layer#chapter_06_filters)将用户转发给向导。 – 1ed 2012-04-23 21:55:51

回答

1

A Symfony filter是一个很好的选择。

  • 把myWizardFilter.class.php在应用程序中lib文件夹:

    class myWizardFilter extends sfFilter { 
    
        public function execute ($filterChain) { 
    
         if ($this->isFirstCall() && $wizardMode && $outsideWizard) { 
    
          $controller = $this->getContext()->getController(); 
          $controller->forward('wizardModule', 'wizardAction'); 
          throw new sfStopException();    
    
         } 
    
         $filterChain->execute();  
        } 
    } 
    
  • 你必须得到任何你检查,看看用户是否是在向导模式来代替$wizardMode
  • 您需要检查路由,以便在用户尝试导航$outsideWizard时只重定向到向导模式。否则,你会得到一个重定向循环。
  • 然后过滤器添加到您的filters.yml:

    wizard: 
        class: myWizardFilter 
    
+0

谢谢Kenny - 这正是我需要的。 – Trevelyan005 2012-04-24 15:32:37