symfony 1.4在模板和操作之间传递变量
我有一个索引页面,其中包含通过switch语句调用一系列部分内容;它的工作原理。我现在需要根据用户的类型限制对部分的访问;此外,我相信我的switch语句应该在MVC的actions类中,但是我也无法使用它。通过示例可以更好地解释这一点:
这是我的仪表板模块的文件结构:
..dashboard
..actions
..config
..templates
_admins.php
_employers.php
_employees.php
_guest.php
indexSuccess.php
这是我当前的indexSuccess模板(当前有效...但如果记录的用户类型与页面类型不匹配,则不限制访问权限):
$type = sfContext::getInstance()->getUser()->getGuardUser()->getProfile()->getType()->getName();
switch($type)
{
case ('Employer'):
include_partial('dashboard/employers');
$page_user_type = "employer"; //this example line currently does not exist, it's for example purpose below
$break;
case ('Employee'):
include_partial('dashboard/employees');
break;
case ('Administrator'):
include_partial('dashboard/admins');
break;
default: include_partial('dashboard/guest');
break;
}
这是我的动作类(当前为空):
public function executeIndex(sfWebRequest $request)
{
}
基本上,我需要的是切换语句移动到动作(我认为),并添加了forward404Unless()方法,执行以下操作:
$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语句添加一个变量,然后将该变量传递给index动作然后对其进行评估并允许部分呈现,或者user_type和partial_type没有匹配 - >转到404页面。合理?我希望我能够解释得足够多。我确信有一种更简单的方法......我只是没有受过足够的教育,知道那可能是什么。
我确实感谢您的回复并尝试解决我的问题。
答案 0 :(得分:0)
我很难理解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');
}
在视图中使用switch
语句是完全可以接受的,但如果这是indexSuccess.php
的全部内容,您可能希望调用sfAction::setTemplate
。
答案 1 :(得分:0)
好的,我自己想出了这个。以下是我为获得理想结果所做的工作:
答案 2 :(得分:0)
您应该使用凭据系统来阻止未授权用户访问资源。 您的用户的“类型”可以成为凭证的名称。然后你只需要创建security.yml来处理它。