我正在编写一个很棒的 Kohana 框架上的 CMS,管理员用户可以在其中选择后端几种页面,并将它们添加到具有完全自定义 URL 的菜单中。
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 类?
谢谢