Я был слишком сонлив, когда задал вопрос, так извините за это, так или иначе, чтобы понять, что я подготовил вопрос в течение 2 часов.
Я пытаюсь организовать свой код и решил организовать его mvc'ish (mvc-like), я не знаю, могу ли я следовать всем принципам, но я хотел быть как минимум близок к этому.
В моем приложении есть фронт-контроллер (не знаю, если мое определение правильное), так что весь http-запрос моего приложения будет проходить через одну точку, в моем случае index.php
в корневом каталоге моего приложение.
Сказав, что я настроил это так, вы можете себе представить, что я использовал .htaccess
для направления всего запроса на index.php
.
Я взорвал url
и создал массив из него, $url[]
, как это. Поэтому всякий раз, когда я получаю доступ к моему приложению, как этот http://localhost/app/pagename
, он будет обращаться к контроллеру (pagename_controller
)
Я сделал это вот так:
$file = $controller_path . $page . '_controller.php';
if (file_exists($file)) {
require $file;
$class_name = ucfirst($page) . '_controller';
$target = new $class_name();
}
Также я завершаю его в контейнере, "узор декоратора", для будущего использования, возможно, проверки. например:
$controller = new Wrap($target);
$controller->index();
Я не знаю, подходит ли использование имени переменной $controller
, поэтому, пожалуйста, простите меня, когда все будет неправильно.
Мне кажется, что я могу настроить свое приложение следующим образом:
-
пользователь отправляет запрос, как? с помощью приложения означает, что он отправляет http-запрос, который загрузит начальное состояние приложения
Как вы можете видеть на диаграмме моей желаемой структуры приложения, я смог выполнить только первую часть, которая должна направить запрос на одну запись (index.php
)
Теперь проблема заключается в инициализации других частей приложения.
С этого момента у меня есть 3 файла, которые я хочу настроить, но я смущен тем, как.
index_controller
, index_view
, Template
class Index_controller {
private $model;
private $view;
public function __construct(){
// optional model -> $this->model = 'index'
$this->view = 'index' //
}
public function index(){
$this->load->view($this->view)
}
}
class Index_view {
private $model;
private $template;
public function __construct(Model $model = null){
$this->template = new Template('default');
}
public function view() {
$this->template->assign('css', 'default_css'); // don't know if this is efficient
// or $this->template->assign('header', 'default_header');
// or $this->template->assign('sidebar', 'default_sidebar');
// or $this->template->assign('footer', 'default_footer');
// or any other things I want to use in the template
}
}
class Template {
public $data = array();
private $tmpl;
public function __construct($template) {
$this->tmpl = $template . '_tmpl.php';
}
public function assign($name, $value){
$this->data[$name] = $value;
}
// public function output
// function that will explode the data array and render it out as a webpage
// I'll create templates and
}
С этой стороны я хочу знать, как мне связать эти вещи вместе. На данный момент у меня есть папка system
, которая может содержать классы, и я настраиваю автозагрузчик для этой папки.
Я думаю о создании класса Controller
и View
, который действует как ActionFactory и ViewFactory, как показано на диаграмме, хотя я знаю, что это не их обязанности.
Я думаю об этом:
class Controller {
protected $load;
public function __construct() {
$this->load = new View();
}
}
class View {
public function __construct() {
// some things i don't know
}
public function view() {
// some things i don't know
}
}
Каковы ваши предложения и комментарии в моей настройке. Как я могу инициировать триаду?