PHP框架工作流程

时间:2015-03-14 05:29:50

标签: php cakephp frameworks

我对php框架如何与apache这样的web服务器一起工作感到困惑。现在,如果没有框架,如果它使用经典的PHP,那么我理解它是如何工作的(如果请求php文件,php解析器执行它并将htm返回给服务器)。

当使用像cakePHP这样的框架时,我注意到无论客户端请求哪个URL,根文件夹中的index.php都会先被执行。这怎么可能?如果我们使用的是纯PHP,那么只有我们请求的文件才会被执行。那么cakePHP如何使每个请求都通过/index.php文件?

3 个答案:

答案 0 :(得分:2)

CakePHP和许多其他网站利用mod_rewrite这是一个Apache模块“提供基于规则的重写引擎来动态重写所请求的URL ”。

为此,Web框架将使用定义了特定规则的.htaccess文件。在您询问的情况下,这些规则将与特定模式匹配的任何URL指向真实的 index.php文件(此文件可以真正命名,但是{{1} }是一个很好的“默认”名称。)

根据CakePHP的URL Rewriting大纲,基本规则定义为:

index.php

以上是做什么的:

  1. 打开重写模块
  2. 设置重写当前网址的两个条件

    一个。如果请求的文件不是真实目录(<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /path/to/cake/app RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>

    ,则

    如果请求的文件不是真实文件(!-d

  3. 将完整请求的网址!-f发送到(.*)
  4. 有时,您会将index.php行视为:

    RewriteRule

    这会将请求的网址设置为RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 参数,而不是强制应用程序处理$_GET['url']。其他时候,会有很多重写规则,有些复杂,有些基本。

    关于$_SERVER['REQUEST_URI'],网上和书中都有很多好的资源。查看Introduction to URL Rewriting一个(我已经添加了书签,有很多好的基本规则/格式)。

答案 1 :(得分:0)

这是一个非常简单的(https://github.com/gilbitron/PIP)。 读取System文件夹中的文件。 基本上它是这样的:

所有请求都发送到索引文件(使用mod_rewrite,或者像普通的get参数一样)。

索引文件包含配置文件和常量定义。

然后它加载了framerwork的主类。

主类进行一些配置,启动数据库连接等等。

根据它的实现方式,可能有一个路由器,但它可能没有。如果有一个主类检查应该在路由器中对请求加载哪个控制器。

然后主类加载应该加载该特定请求的控制器。

PIP并不是那么好,主要类实际上不是一个类,但你可以明白它。


您还可以阅读以下内容:

面向对象编程:http://php.net/manual/en/language.oop5.php

范围:http://php.net/manual/en/language.variables.scope.php

自动加载课程:http://php.net/manual/en/language.oop5.autoload.php

答案 2 :(得分:0)

您提到

  

“我注意到无论客户端请求哪个url,都会首先执行根文件夹中的index.php。”

这是前端控制器的工作。您可以使用带有框架的前端控制器,也可以使用.htaccess文件从头开始进行编码。前端控制器可以使用PHP函数/方法(例如Lumen中的$app->get($uri, $callback);)渲染页面。