【问题标题】:codeigniter use of redirect()使用redirect()的codeigniter
【发布时间】:2011-04-06 17:47:26
【问题描述】:

我在需要加载我的应用程序主视图的每个函数中都使用了 redirect()(来自 uri 助手)。它重定向到相同的功能。我的目标是获得相同的干净 uri,即使我使用页面的功能(调用其他控制器)。这是好习惯吗?我什么时候应该使用redirect()?有没有其他解决方案可以获得类似的结果?

这是一些需要澄清的代码。

这是一个控制器:

<?php

   class Main_controller extends Controller
   {
       function index()
       {
       $this->load->view(page); 
       }

       function page_feature()
       {
       /* some stuff */
       redirect('main_controller.php','refresh');
       }
   }

有了这条路线规则:

$route['([a-z-A-Z1-9_]+)'] = "main_controller";

uri 是这样的:myapp.com/something 在这个页面上,有调用(提交时)main_controller(或其他控制器)的其他功能的功能,例如一个表单:

<form action="myapp.com/another_controller/method" method="post">

在这个查询“/another_controller/method”的末尾,我使用redirect('main_controller') 来显示带有新数据的视图,并保留uri“myapp.com/something”而不是“myapp.com /another_controller/method”。

我想知道这是好的还是坏的做法,以及为什么。

【问题讨论】:

    标签: codeigniter redirect uri helper


    【解决方案1】:

    使用这样的重定向是不好的做法;您基本上将服务器请求的数量增加了一倍。

    如果您不想在 URL 中包含函数名称,只需将表单 POST 发送到控制器 index() 函数,然后根据某些条件(例如从表单 POST 传递的内容)调用您需要的函数数据:

    <form action="myapp.com/controller_name" method="post">
    

    控制器:

    function index(){
            if(!empty($_POST['some_form_data'])){
                $this->page_feature(); 
           }
           else{
                $this->load->view('page');
            }
    }
    function page_feature(){
           /* some stuff */
           $this->load->view('page_feature');
    }
    

    您可能还想查看_remap() 函数。这样额外的 uri 段就不会被视为函数调用。

    【讨论】:

    • 谢谢,这正是我想要的。
    【解决方案2】:

    重定向对于防止用户重新提交表单数据最有用。如果您只是在您提交到的同一 URL 上显示您的输出,刷新页面的用户将始终收到提示,要求他们重新提交表单。

    重定向还会通过让客户端向服务器执行一个请求来影响性能,但在大多数情况下这可能可以忽略不计。

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 2014-01-03
      • 2012-07-02
      • 2011-05-15
      • 1970-01-01
      • 2020-11-12
      • 2020-07-29
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多