2

我在需要加载我的应用程序主视图的每个函数中都使用了 redirect() (来自 uri helper)。它重定向到相同的功能。我的目标是获得相同的干净 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/方法”。

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

4

2 回答 2

6

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

如果您不想在 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 段不会被视为函数调用。

于 2010-09-02T04:07:23.113 回答
1

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

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

于 2010-09-01T11:36:31.800 回答