У меня есть MY_Controller
как родительский класс. Он загружает только представления, передавая им некоторые данные. Мое приложение представляет собой простой веб-сайт с несколькими контроллерами, расширяющими MY_Controller
, которые просто устанавливают некоторые переменные, которые содержат информацию, которая должна быть передана в представления.DRY'ing мое приложение
У меня есть один контроллер, который немного отличается от других. Он должен передать больше информации в представления, взятые из базы данных. Что мне делать в этом случае?
Как я вижу, я могу переопределить всю функцию индекса в этом контроллере, но это нарушает правило DRY, потому что единственное различие заключается в установке нескольких значений в мой массив, который передается каждому представлению. Или я могу написать немного LOC в родительском контроллере, но я думаю, что это не очень хорошая практика, поскольку этот дочерний контроллер является единственным контроллером, которому нужен этот код.
Я боролся с этим некоторое время и был бы рад, если бы вы могли указать мне в правильном направлении или дать мне несколько советов, как это сделать должным образом.
Мои контроллеры:
class MY_Controller extends CI_Controller { $style='', $contents = array(), $title=''; //and so on public function index() { $data['style'] = $this->style; $data['title'] = $this->title; $this->load->view('header',$data); foreach($this->contents as $row) { $this->load->view($row,$data); } $this->load->view('footer',$data); } }
Галерея контроллер до сих пор
class Gallery extends MY_Controller { $style = 'galeria.css', $title = 'galeria', $contents = array('content_gallery'); // if $gallery is null, show only all galleries in a list, //else show chosen gallery with its content beneath that list public function index($gallery = NULL) { $data['galleries'] = $this->gallery_model->get_all_active_galleries(); //names and ids if($gallery != NULL) { $data['name'] = ... $data['description'] = ... etc... } } }