Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php symfony 1.4在模板和操作之间传递变量_Php_Symfony1_Symfony 1.4 - Fatal编程技术网

Php symfony 1.4在模板和操作之间传递变量

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

symfony 1.4在模板和操作之间传递变量

我有一个索引页,其中包括通过switch语句对一系列部分的调用;它是有效的。我现在需要根据用户的类型限制对部分内容的访问;此外,根据MVC,我相信我的switch语句应该在actions类中,但我也不能让它工作。通过以下示例可以更好地解释这一点:

以下是我的仪表板模块文件结构:

..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');
    }