【问题标题】:Passing data to view when using redirect in cakephp在 cakephp 中使用重定向时传递数据以查看
【发布时间】:2011-04-21 17:47:30
【问题描述】:

我在一个视图编辑个人资料和更改密码上有两个表单。我已将 changepassword 表单操作设置为 changePassword 并且我正在使用

$this->autoRender = false; 
$this->render("index");
$this->redirect("index#chngPassTab");

但由于重定向,我无法设置一些要查看的变量。我不想使用会话。 我想根据控制器操作中的条件设置一些变量,在视图中获取这些变量值,并且在回发后重新加载页面时,应该为我使用的密码选项卡选择$this->redirect("index#chngPassTab");

请指导我解决此问题的最佳方法。谢谢。

【问题讨论】:

    标签: cakephp variables view set cakephp-1.3


    【解决方案1】:

    设置一个 jquery 来根据您解析到视图的数据来处理更改会不会更容易?

    因此,例如,在您发布帖子后,您的$whatever_variable 已设置

    那么在你看来

    <script>
     <?php if(!empty($whatever_variable): ?>
         $('.tabs').tabs('select', '#chngPassTab');; //or whatever plugin yu are using
    <?php endif?>
    </script>
    

    编辑:我的错,只是重新阅读您的问题,并强调您的帖子操作与您的观点不同。在这种情况下,发布到索引控制器,然后从索引控制器调用 changepassowrd 操作,该操作返回您希望它返回的任何内容。或者,使用会话。

    【讨论】:

      【解决方案2】:

      在控制器的功能中试试这个:

      $this->set('name_of_variable', {YOUR DATA HERE});
      

      然后在视图中,就可以访问变量了:

      <?php echo $name_of_variable; ?>
      

      【讨论】:

        【解决方案3】:

        我认为您需要在重定向到索引控制器时对其进行一些处理。处理表单时保存的任何项目都将在数据库中可用,如果您正在根据 url 处理某些内容,则可以在呈现之前执行此操作。

        加号:

        $this->autoRender(false);
        

        会阻止你的控制器渲染,然后调用

        $this->render("index");
        

        会尝试呈现您的索引视图,但调用

        $this->redirect("index#chngPassTab");
        

        将覆盖它并重定向它,在这种情况下您只需要进行重定向,渲染调用将变得无用。

        【讨论】:

        • Redirect 采用数组 URL 或相对字符串 URL,你的两者都不是。
        • 实际上该字符串是相对的,并附加在引荐来源网址的末尾。所以如果你说redirect("index")并且你来自/posts/add,它会把你带到/posts/index。那不是我真正要评论的。更何况我是说有额外的跑腿工作没有做任何事情。
        • 对不起,我没有使用数据库中的任何数据。如果数据无效,只会显示一些错误消息。我不能在 $this->render("index"); 中传递#chngPassTab;所以应该选择密码选项卡,因为 jquery 选项卡需要这个来知道应该选择哪个选项卡
        【解决方案4】:

        Http 在设计上是无状态的。如果您重定向最后一个请求的数据就消失了。这就是发明会话的原因。

        如果您希望数据显示停止使用重定向。

        此外,调用渲染和重定向是没有意义的,因为渲染永远不会被渲染。

        【讨论】:

        • 是的,它会显示数据,但是有什么我可以做一个视图,以便当按下更改密码选项卡上的提交按钮并重新加载页面时,它应该选择更改密码选项卡。我正在使用 jquery 选项卡菜单。默认需要#changpassword参数选择修改密码。
        • $this->Html->link('meh', array('action' => 'something', '#' => '更改密码'));
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-17
        • 2021-05-27
        • 2020-03-01
        • 2014-10-05
        • 2012-10-31
        • 2021-12-29
        相关资源
        最近更新 更多