1

私は現在、PHP Framework Codeigniterを調べており、_remappingに関するControllersセクションまで、これまでの主な概念を理解しています。_remappingがURIを介したコントローラーメソッドの動作をどのように上書きするかを理解しています(例:www.example.com/about_meからwww.example.com/about-me)。私が聞きたいのは、何を使用するかについての人々の意見です-_remappingメソッドまたはURIルーティングメソッド?これらのメソッドを研究していて、誰かが関数の再マッピングで問題を抱えているときに、URIルーティングを使用するように指示されたので、これを尋ねるだけです。

それで..

1)使用する主な一般的な方法は何ですか?プロは他の方法よりも優れていますか?2)PHP5 CIバージョン2以降ではURIルーティングを使用するのが最善ですか?

ご意見をいただければ幸いです。

4

3 に答える 3

1

デフォルトのCIのルーティングの動作を変更する場合は、_remapを使用する必要があります。

たとえば、メンテナンスを設定し、特定のコントローラーの実行をブロックする場合は、ビューをロードする_remap()関数を使用できます。この関数は、他のメソッドを呼び出しません。

もう1つの例は、URIに複数のメソッドがある場合です。例:

site.com/category/PHP
site.com/category/Javascript
site.com/category/ActionScript

あなたのコントローラーはそうですcategoryが、メソッドは無制限です。ここで、Colin Williamsによって呼び出された_remapメソッドを使用できます:http: //codeigniter.com/forums/viewthread/135187/

 function _remap($method)
{
  $param_offset = 2;

  // Default to index
  if ( ! method_exists($this, $method))
  {
    // We need one more param
    $param_offset = 1;
    $method = 'index';
  }

  // Since all we get is $method, load up everything else in the URI
  $params = array_slice($this->uri->rsegment_array(), $param_offset);

  // Call the determined method with all params
  call_user_func_array(array($this, $method), $params);
}  

要約すると、現在のCIのルーティングがプロジェクトに適している場合は、_remap()メソッドを使用しないでください。

于 2012-08-20T10:33:15.687 に答える
1

コントローラのindex(つまりhttp://www.yourdomain.com/category)アクションを使用したくない場合は、ルートを使用できます。Categories

$route['category/(:any)'] = 'category/view/$1';

次に、カテゴリ名、つまりPHPを受け取るには、カテゴリコントローラ内の表示アクションが必要です。

http://www.yourdomain.com/category/PHP

function View($Tag)
{
    var_dump($Tag);
}

それでもコントローラー内のインデックスアクションにアクセスしたい場合は、http://www.yourdomain.com/category/indexからアクセスできます。

于 2012-08-20T12:16:56.390 に答える
1
$default_controller = "Home";

$language_alias = array('gr','fr');

$controller_exceptions = array('signup');

$route['default_controller'] = $default_controller;

$route["^(".implode('|', $language_alias).")/(".implode('|', $controller_exceptions).")(.*)"] = '$2';

$route["^(".implode('|', $language_alias).")?/(.*)"] = $default_controller.'/$2';

$route["^((?!\b".implode('\b|\b', $controller_exceptions)."\b).*)$"] = $default_controller.'/$1';

foreach($language_alias as $language)

$route[$language] = $default_controller.'/index';
于 2017-08-22T10:56:55.343 に答える