管理者ユーザーがバックエンドでいくつかの種類のページを選択し、完全にカスタマイズされたURLを使用してメニューに追加できる、優れたコハナフレームワークでCMSを作成しています。
Example of custom URL : "mmmm/about" or "aaa/bbb/release"
各URLに表示される内容を格納するデータベーステーブルがあります。
Example :
URL : mmm/about Pagekind : Content page ; (Page) Id : 7
URL : aaa/release Pagekind : News ; (News) Id : 1
各ページの種類には独自のコントローラーがあります(したがって、よりクリーンで、管理しやすく、新しいページの種類を追加しやすくなります):
Examples :
>>> In /application/classes/Controller/Pages :
class Controller_Pages() extends Controller_Template {
public function action_index(){
...
}
}
>>> In /application/classes/Controller/News :
class Controller_News() extends Controller_Template {
public function action_index(){
...
}
}
メニューコントローラーにすべてを送信するこのようなルートがあります:
Route::set( 'menu_path', '(<menupath>)', array('menupath' => '.*?') )
->defaults(
array(
'controller' => 'menu',
'action' => 'dispatch'
)
);
私のメニューコントローラーはディスパッチを行う必要があります:
>>> In /application/classes/Controller/Menu :
class Controller_Menu() extends Controller_Template
{
public function action_dispatch()
{
// Get the path :
$menupath = $this->request->param('menupath');
// Get page info
$obj = ORM::factory('tablemenu')->where('URL','=',$menupath)->find();
// Regarding to page kind, call the appropriate controller
switch ($obj->Pagekind)
{
case 'Content page' :
// Call controller Page with $obj->Id as page id
// ????????
// ????????
break;
case 'News' :
// Call controller News with $obj->Id as news id
// ????????
// ????????
break;
}
}
}
だから私はコールコントローラーの部分で立ち往生しています。私の質問は:
-コントローラー内でコントローラーを呼び出す方法はありますか?(SEOのリダイレクトなし)
-はいの場合、それはきれいですか?信頼性のある ?
-そうする別の方法はありますか?Routeクラスを上書きしたいですか?
ありがとう