【发布时间】:2018-09-17 07:34:29
【问题描述】:
我正在使用 Codeigniter 3.1.8 开发一个博客应用程序。
我有一个带有“静态”数据的模型,例如网站标题、联系电子邮件地址等:
class Static_model extends CI_Model {
public function get_static_data() {
$data['site_title'] = "My Blog";
$data['tagline'] = "A simple blog application made with Codeigniter 3";
$data['company_name'] = "My Company";
$data['company_email'] = "company@domain.com";
return $data;
}
}
在我的帖子控制器中,我尝试以这种方式传递 DRY 原则:
class Posts extends CI_Controller {
public function __construct()
{
parent::__construct();
// Load static data
$this->load->model('Static_model');
$data = $this->Static_model->get_static_data();
// Load Header
$this->load->view('partials/header', $data);
}
public function index()
{
$this->load->model('Posts_model');
$data['posts'] = $this->Posts_model->get_posts();
$this->load->view('posts', $data);
$this->load->view('partials/footer');
}
public function post($id)
{
$this->load->model('Posts_model');
$data['post'] = $this->Posts_model->get_post($id);
if (!empty($data['post'])) {
// Overwrite the default tagline with the post title
$data['tagline'] = $data['post']->title;
} else {
$data['tagline'] = "Page not found";
show_404();
}
$this->load->view('post', $data);
$this->load->view('partials/footer');
}
}
在 this topic 中查看我是如何编写上述代码的详细信息。
上述代码的问题在于$data['tagline'] = $data['post']->title; 行不再用帖子标题覆盖静态标语$data['tagline'] = "A simple blog application made with Codeigniter 3";。当控制器看起来像这样时,它确实覆盖了它:
类帖子扩展 CI_Controller {
public function index()
{
$this->load->model('Static_model');
$data = $this->Static_model->get_static_data();
$this->load->model('Posts_model');
$data['posts'] = $this->Posts_model->get_posts();
$this->load->view('partials/header', $data);
$this->load->view('posts');
$this->load->view('partials/footer');
}
public function post($id) {
$this->load->model('Static_model');
$data = $this->Static_model->get_static_data();
$this->load->model('Posts_model');
$data['post'] = $this->Posts_model->get_post($id);
// Overwrite the default tagline with the post title
$data['tagline'] = $data['post']->title;
$this->load->view('partials/header', $data);
$this->load->view('post');
$this->load->view('partials/footer');
}
}
这个旧版本的 Bot 违反了 DRY 原则。
如何在不违反“DRY 戒律”的情况下进行所需的覆盖?
【问题讨论】:
-
错误是什么?
-
没有错误,只是
$data['tagline'] = $data['post']->title;不再起作用了。
标签: php codeigniter