【问题标题】:Redirect to another controller with data使用数据重定向到另一个控制器
【发布时间】:2013-04-10 15:01:29
【问题描述】:

我有一个尝试注册新用户的action_register 函数。如果成功,我希望将用户转发到登录表单(通过action_login 显示)。不过,我还想向登录视图发送 $message$message_type,上面写着“您的帐户已创建,请登录”。

最好的方法是什么。最好的意思是可维护、清洁和安全。

到目前为止我的想法:

  • 将数据发布到路由到action_login 的url 并重定向。
  • 找到一种将数据直接发送到控制器方法的方法,并让action_login 像往常一样呈现。

【问题讨论】:

    标签: php fuelphp


    【解决方案1】:

    你实际上不需要做任何sn-p的代码来设置会话消息,Fuel php提供了一个很好的接口来处理这样的特性。它的核心会话类是我们需要按照文档使用的方式。

    在您的情况下,假设您需要从 register_action 重定向到 login_action 并在成功注册过程后,然后像下面那样设置 flash 消息

    Session::set_flash('success', 'Your account has been successfully created !'); 
    

    稍后在登录的视图文件中,您可以使用以下代码获取您想要的 Flash 消息。有些像这样的

    <?php if (Session::get_flash('success')): ?>
        <div class="alert-box info">
            <?php echo  Session::get_flash('success') ; ?>
    
        </div>
    <?php endif; ?>
    

    您也可以使用下面的 delete_flash 方法删除上面示例中的会话消息“成功”

    Session::delete_flash('success');
    

    要了解更多关于会话课程的信息,您可以从下面的链接中了解

    FuelPhp Session Class docuementation

    而且为了重定向用户,您不需要编写任何新的 PHP 代码,Fuel php 也为此提供了一个很好的接口,它的“响应”类具有为您定义的方法

    这是您需要在任何控制器操作中重定向用户的方式

    Response::redirect('yourRouteName');
    

    利用框架中定义的类始终是一种很好的做法,这些类实际上是为了让开发人员的生活更轻松而定义的。

    在你的编程方法中是面向对象的,特别是在使用像fuelPhp这样的高质量OOP MVC框架时,通过为你提供对现成的Getters and setters的访问,可以防止你总是重新发明轮子(DRY)。

    希望对你有帮助

    【讨论】:

    • 虽然@Telvin Nguyen 的代码可能会按预期工作,但使用框架必须提供的类是做事的正确方法。我投票给这个!
    • 是的,当我询问设置闪存变量时,我正在这样做。效果非常好。
    【解决方案2】:

    这种情况下的消息只显示一次(注册后),但我相信将来您的项目会出现很多这样的消息。

    你应该制作sn-p代码来做那件事并实现可重用性 - 作为结果做某事后,您需要将消息存储到会话变量中,然后重定向到其他操作 例如:

        $_SESSION['msg'] = 'Your account has been created, please log in';
    
    • 在屏幕目标上,检查是否设置了会话变量,然后打印存储在会话变量中的消息并清除它。

              <?php
              if(isset($_SESSION['msg']){
              ?>
              <script>
              //call some javascript function to display popup for example
              var msg = '<?php echo $_SESSION['msg']; ?>';
              display_popup_message(msg);
      
              function display_popup_message(msg){
                  alert(msg);
              }
              </script>
              <?php
              unset($_SESSION['msg']);
              }
              ?>
      

    【讨论】:

    • 啊,正确的会话变量,这更有意义。我应该设置一个 Flash 会话变量吗?
    • FuelPHP 不使用 PHP 本地会话,因此默认情况下不会将其传递给下一个请求。 aravind.udayashankara 的 anwser 是正确的做法。
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多