2010-09-01 89 views
2

我在每个需要加载我的应用程序主视图的函数中使用redirect()(来自uri helper)。它重定向到相同的功能。我的目标是获得相同的清洁uri,即使当我使用页面功能(即调用其他控制器)时。这是不错的做法吗?我应该什么时候使用重定向()?是否有其他解决方案来获得类似的结果?codeigniter使用重定向()

这是一些代码澄清。

这里是控制器:

<?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(或其他控制器)的其他功能,如一个形式,例如:

​​

在这个查询结尾“/ another_controller/method”,我使用重定向('main_controller')显示新数据的视图,并保持uri“myapp.com/something”而不是“myapp.com/another_controller /方法”。

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

回答

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段不被视为函数调用。

+0

谢谢,这是我一直在寻找。 – Joeyjoejoe 2010-09-02 10:56:00

1

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

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