提案されたURL構造を実装するには、
を使用する中央ディスパッチャを1つ作成する必要があります。- 要求されたURLを分析します。
- データベースにクエリを実行して、カテゴリを見つけて表示します。
- カテゴリが見つからない場合は、テキスト投稿を見つけて表示しようとします。
コントローラーの仕事のように聞こえます。しかし、どのようにしてすべての要求に応答するコントローラーを作成するのでしょうか。ワイルドカードルーティングの助けを借りて!
application / config / routers.php
$route['.*'] = 'default_controller';
これで、URIに関係なく、すべてのリクエストがDefault_controller.php
にルーティングされます。 。
しかし、どのメソッドが呼び出されるかを知らずに、どのようにコントローラーを作成するのでしょうか。方法があります:組み込みのコントローラーサービスメソッド_remap
。
ドキュメント から :
だから私はあなたのためにDefault_controllerのコンセプトを想像して作成させました:
application / controllers / Default_controller.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Default_controller extends CI_Controller {
// Pseudocode ensues
public function _remap()
{
// www.mydomain.com/(someTextHere)
$slug = $this->uri->segment(1);
$result = $this->load_data($slug);
echo $result;
}
private function load_data($slug)
{
// Trying to find a category
$category = $this->category_model->find($slug);
if($category !== false)
{
// Presumably loads view into buffer
// and returns it to the calling method
return $this->load_category($category);
}
Trying to find post
$post = $this->post_model->find($slug);
if($post !== false)
{
return $this->load_post($post);
}
// Neither category nor post found
show_404();
}
private function load_category($category)
{
// http://www.codeigniter.com/user_guide/general/views.html#returning-views-as-data
return $this->load->view("category", array("category" => $category), true);
}
}
注:この回答は、新しくダウンロードした Codeigniter3.0.3でテストしました。 a>