编写一个基本的PHP MVC,不知道如何开始

Urd*_*rda 5 php mysql mod-rewrite permalinks

我正在开发一个基于PHP和MySQL的个人项目,我正在做一些研究并玩弄重写.说我有一个网站......

http://www.myDomain.com/
Run Code Online (Sandbox Code Playgroud)

我希望在域的根目录中有一个index.php或bootstrap.所以,如果你访问...

http://www.myDomain.com/admin/
Run Code Online (Sandbox Code Playgroud)

它仍然会从域顶层的index.php加载,它处理配置文件的解析和加载,并将用户重定向到正确的位置,沿途制作漂亮的链接.

我应该从哪里开始我的研究和教育?我有些不知所措.感谢您的时间 :)


更新:

听起来像我希望向MVC系统与移动前端控制器.关于编写我自己的MVC框架的任何好的参考(将是非常基本的).老实说,我不想在此时使用Zend Framework(会大量增加它!)

dav*_*nal 2

基本上,您将任何传入请求重写到您的index.php. 这是Kohana.htaccess框架的一个示例:

# Turn on URL rewriting
RewriteEngine On

# Protect application and system files from being viewed
# RewriteRule ^(application|modules|system) - [F,L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT,L]
Run Code Online (Sandbox Code Playgroud)

因此您的示例将被路由到index.php/admin. 然后你可以看看$_SERVER['REQUEST_URI']以确定下一步该做什么。

一个相对常见的模式是使用 的第一段作为URI控制器,第二段作为方法。例如:

$segments = explode($_SERVER['request_uri'], '/');//array('admin')

if(isset($segments[0]))
{
    $class = $segments[0].'_controller';//'admin_controller

    if(isset($segments[1]))
         $method = $segments[1];
    else
         $method = 'index';
}
else
{
    $class = 'index_controller';
    $method = 'index';
}

$controller = new $class;
$controller->$method();
Run Code Online (Sandbox Code Playgroud)

该代码绝不是生产就绪的,因为如果用户访问了不存在的控制器的 URL,那么它就会死得很惨。它也没有做一些好的事情,比如处理参数。但这是 PHP MVC 框架如何运行背后的想法。

顺便说一句,您所说的 bootstrap 的另一个名称是front controller。您可以通过谷歌搜索该术语来查找有关该模式的更多信息。