2

私は、アプリのメインビューをロードする必要があるすべての関数で(URIヘルパーからの)redirect()を使用します。同じ機能にリダイレクトします。私の目標は、ページの機能(他のコントローラーを呼び出す)を使用している場合でも、同じクリーンな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/another_controller/」ではなく「myapp.com/something」のままにします。方法"。

これが良い習慣なのか悪い習慣なのか、そしてその理由を知りたかったのです。

4

2 に答える 2

6

そのようなリダイレクトを使用することは悪い習慣です。基本的にサーバーリクエストの数が2倍になります。

URLに関数名を含めたくない場合は、コントローラーのindex()関数にフォームPOSTを設定し、フォーム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で出力を表示するだけの場合、ページを更新するユーザーには、フォームの再送信を求めるプロンプトが常に表示されます。

リダイレクトは、クライアントにサーバーへのもう1つの要求を実行させることによってパフォーマンスにも影響を与えますが、ほとんどの状況ではおそらく無視できます。

于 2010-09-01T11:36:31.800 に答える