5

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

http://www.myDomain.com/

我想在域的根目录中有一个 index.php 或引导程序。所以如果你访问...

http://www.myDomain.com/admin/

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

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


更新:

听起来我确实想转向带有前端控制器的 MVC 系统。关于编写我自己的 MVC 框架的任何好的参考资料(将是非常基础的)。老实说,我现在不想引入 Zend 框架(会增加很多!)

4

2 回答 2

2

基本上,您将任何传入请求重写为您的index.php. .htaccess下面是来自Kohana框架的示例:

# 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]

因此,您的示例将被路由到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();

该代码绝不是生产就绪的,因为如果例如用户访问一个不存在的控制器的 URL,它就会死去。它也没有做像处理参数这样的好事情。但这是 PHP MVC 框架如何运作的一种想法。

顺便说一句,您所说的引导程序的另一个名称是前端控制器。您可以搜索该术语以找到有关该模式的更多信息。

于 2010-03-04T02:13:26.617 回答
1

您将需要考虑配置您.htaccess的内部重写所有请求到您的引导文件,这可能是 index.php

Kohana 使用它来做到这一点

# 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]

然后,您可以访问$_SERVER['REQUEST_URI']以开始将请求路由到控制器。

于 2010-03-04T02:07:53.257 回答