Php symfony 1.4在模板和操作之间传递变量
symfony 1.4在模板和操作之间传递变量 我有一个索引页,其中包括通过switch语句对一系列部分的调用;它是有效的。我现在需要根据用户的类型限制对部分内容的访问;此外,根据MVC,我相信我的switch语句应该在actions类中,但我也不能让它工作。通过以下示例可以更好地解释这一点: 以下是我的仪表板模块文件结构:Php symfony 1.4在模板和操作之间传递变量,php,symfony1,symfony-1.4,Php,Symfony1,Symfony 1.4,symfony 1.4在模板和操作之间传递变量 我有一个索引页,其中包括通过switch语句对一系列部分的调用;它是有效的。我现在需要根据用户的类型限制对部分内容的访问;此外,根据MVC,我相信我的switch语句应该在actions类中,但我也不能让它工作。通过以下示例可以更好地解释这一点: 以下是我的仪表板模块文件结构: ..dashboard ..actions ..config ..templates _admins.php _em
..dashboard
..actions
..config
..templates
_admins.php
_employers.php
_employees.php
_guest.php
indexSuccess.php
这是我当前的indexSuccess模板(当前有效…但如果登录用户的类型与页面类型不匹配,则不限制访问):
这是我的actions类(当前为空):
基本上,我需要的是将switch语句移动到action(我认为),并添加一个forward404uncert()方法,该方法执行以下操作:
$logged_user = sfContext::getInstance()->getUser()->getGuardUser()->getId();
$this->forward404Unless($logged_user == $page_user_type); //where the $page_user_type variable is retrieved by the switch statement in the example line above.
我尝试过使用getAttribute()和setAttribute(),但没有成功。。。由于尴尬,我不想分享尝试。我只是个初学者
任何帮助都将不胜感激。提前谢谢
更新:
以下是有关交换机和不同部分的更多信息:
开关根据用户的类型呈现不同的部分。它没有做的是阻止其他不同类型的登录用户访问所有其他部分。。。在我的设计中,这是非常糟糕的。例如:“雇主”类型的登录用户不能查看“雇员”类型的部分内容。目前,它们可以(通过显式键入其他url),即使它们在索引操作期间被重定向到适当的页面
当错误类型的用户试图通过显式键入url访问另一部分时,应调用404页面。这就是为什么我试图在调用适当的partial时向switch station添加一个变量,然后将该变量传递给index操作,该操作将对其进行评估,并允许呈现partial,或者如果用户类型和partial类型不匹配->转发到404页面。有道理?我希望我解释得足够仔细。我相信有一个更简单的方法。。。我只是没有受过足够的教育,不知道那可能是什么
我真的很感谢你的回应,并试图解决我的问题 我很难理解404什么时候发生。这个能处理吗 行动:
public function executeIndex(sfWebRequest $request)
{
$this->profileType = $this->getUser()->getGuardUser()->getProfile()->getType()->getName();
$this->forward404Unless(in_array($this->profileType, array('type1', 'type2')), 'Invalid profile type');
}
在veiw中有一个
switch
语句是完全可以接受的,不过如果这是indexSuccess.php
的全部内容,您可能希望调用sfAction::setTemplate
。我在理解404何时应该发生时有点困难。这个能处理吗
行动:
public function executeIndex(sfWebRequest $request)
{
$this->profileType = $this->getUser()->getGuardUser()->getProfile()->getType()->getName();
$this->forward404Unless(in_array($this->profileType, array('type1', 'type2')), 'Invalid profile type');
}
在veiw中有一个
switch
语句是完全可以接受的,不过如果这是indexSuccess.php
的全部内容,您可能希望调用sfAction::setTemplate
。好的,我自己解决了这个问题。以下是我为获得预期结果所做的:
好吧,这是我自己想出来的。以下是我为获得预期结果所做的:
您应该使用凭证系统阻止未经授权的用户访问ressource。
用户的“类型”可以成为凭据的名称。然后,您只需创建security.yml来处理该问题。您应该使用凭证系统来阻止未经授权的用户访问ressource。
用户的“类型”可以成为凭据的名称。然后您只需创建security.yml来处理这个问题。谢谢您的回复。但是,您的解决方案并不十分有效。请在问题-更新部分查看我对您的解决方案的答复。我的评论太长,无法在这里回复。谢谢回复。但是,您的解决方案并不十分有效。请在问题-更新部分查看我对您的解决方案的答复。我的评论太长,无法在此作出回应。
public function executeIndex(sfWebRequest $request)
{
$this->profileType = $this->getUser()->getGuardUser()->getProfile()->getType()->getName();
$this->forward404Unless(in_array($this->profileType, array('type1', 'type2')), 'Invalid profile type');
}