当我问这个问题时,我太困了,很抱歉,无论如何,为了让事情清楚,我准备了 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
}
}
您对我的设置有什么建议和意见。如何启动三合会?