Fat Free 框架中的站点导航控制器
Site Navigation Controller in Fat Free Framework
我正在尝试创建一个单独的控制器来处理站点导航,这在整个站点中几乎是不变的,例如主导航和边栏导航以及可能的页脚导航。
如果不为此专门创建一条路线,我不知道该如何去做,我的假设是:如果导航控制器应该在我网站的任何地方独立工作,这意味着我无法指定某种溃败,因为除非我在其他方法中调用它,否则它不会在每个页面上都起作用。
路由
GET / = MainController->render
GET /@category_slug = CategoryController->CategorySlug
我目前的代码如下:
class CategoryController extends Controller
{
public function navigation(){
$categories = new Categories($this->db);
$cat = $categories->all();
$this->f3->set('categories',$cat);
}
function CategorySlug(){
$category_slug = $this->f3->get('PARAMS.category_slug');
$categories = new Categories($this->db);
$cat = $categories->getBySlug($category_slug);
$header_location = $cat[0]['category_slug'];
if($category_slug != $header_location && !empty($header_location)){
header("HTTP/1.1 301 Moved Permanently");
header("Location: $header_location");
}else if(empty($header_location) || $cat[0]['category_id'] != $cat[0]['parent_category_id']){
$this->f3->error(404);
}else{
$this->f3->set('category',$cat[0]);
}
$this->f3->set('view','mainCategory.html');
$this->navigation();
echo \Template::instance()->render('mainLayout.html');
}
}
所以从代码中可以看出,第一个方法是我的站点导航,我需要在第二个方法中调用它才能在分类页面上显示导航。我的主页也是如此,这是我的代码:
class MainController extends Controller
{
function render(){
$classNav = new CategoryController();
$classNav->navigation();
$this->f3->set('view','mainHome.html');
echo \Template::instance()->render('mainLayout.html');
}
}
请提供任何帮助或指点
根据 https://fatfreeframework.com/3.6/routing-engine#EventHandlers,您可以将 beforeroute
方法放入您的控制器中。
此方法在您的 class 中的任何其他路由处理程序之前调用,可用于准备您网站所有其他部分所需的数据。
我正在尝试创建一个单独的控制器来处理站点导航,这在整个站点中几乎是不变的,例如主导航和边栏导航以及可能的页脚导航。
如果不为此专门创建一条路线,我不知道该如何去做,我的假设是:如果导航控制器应该在我网站的任何地方独立工作,这意味着我无法指定某种溃败,因为除非我在其他方法中调用它,否则它不会在每个页面上都起作用。
路由
GET / = MainController->render
GET /@category_slug = CategoryController->CategorySlug
我目前的代码如下:
class CategoryController extends Controller
{
public function navigation(){
$categories = new Categories($this->db);
$cat = $categories->all();
$this->f3->set('categories',$cat);
}
function CategorySlug(){
$category_slug = $this->f3->get('PARAMS.category_slug');
$categories = new Categories($this->db);
$cat = $categories->getBySlug($category_slug);
$header_location = $cat[0]['category_slug'];
if($category_slug != $header_location && !empty($header_location)){
header("HTTP/1.1 301 Moved Permanently");
header("Location: $header_location");
}else if(empty($header_location) || $cat[0]['category_id'] != $cat[0]['parent_category_id']){
$this->f3->error(404);
}else{
$this->f3->set('category',$cat[0]);
}
$this->f3->set('view','mainCategory.html');
$this->navigation();
echo \Template::instance()->render('mainLayout.html');
}
}
所以从代码中可以看出,第一个方法是我的站点导航,我需要在第二个方法中调用它才能在分类页面上显示导航。我的主页也是如此,这是我的代码:
class MainController extends Controller
{
function render(){
$classNav = new CategoryController();
$classNav->navigation();
$this->f3->set('view','mainHome.html');
echo \Template::instance()->render('mainLayout.html');
}
}
请提供任何帮助或指点
根据 https://fatfreeframework.com/3.6/routing-engine#EventHandlers,您可以将 beforeroute
方法放入您的控制器中。
此方法在您的 class 中的任何其他路由处理程序之前调用,可用于准备您网站所有其他部分所需的数据。