Home > php教程 > php手册 > Yii2的深入学习--入口文件,yii2深入学习入口

Yii2的深入学习--入口文件,yii2深入学习入口

WBOY
Release: 2016-06-13 08:53:01
Original
858 people have browsed it

Yii2的深入学习--入口文件,yii2深入学习入口

前一段时间,尝试去写一个 php 的简单框架,发现自己还欠缺很多,就暂时停掉了。准备先读完 Yii2 的源码,然后再去看完 laravel 的源码,最后再继续去写这个简单的 php 框架。

之后关于 Yii2 的学习暂时都是以 basic 的项目为例。

我们先来看一下 Yii2 的入口文件。在配置 Yii2 的 nginx 的配置时,有这样几句

<span>    # server_name mysite.local;
    root        </span>/path/to/basic/<span>web;
    ......

    location </span>/<span> {
        # Redirect everything that isn</span><span>'</span><span>t a real file to index.php</span>
        try_files $uri $uri/ /index.php?<span>$args;
    }</span>
Copy after login

可以看到web的入口文件是 web 文件夹下的 index.php 文件。

index.php 文件的内容如下:

<?<span>php

</span><span>//</span><span> comment out the following two lines when deployed to production
// 定义 debug 的标记</span>
<span>defined</span>('YII_DEBUG') or <span>define</span>('YII_DEBUG', <span>true</span><span>);
</span><span>//</span><span> 定义环境,有 'dev' 和 'prod' 两种</span>
<span>defined</span>('YII_ENV') or <span>define</span>('YII_ENV', 'dev'<span>);

</span><span>//</span><span> 引入 vendor 中的 autoload.php 文件,会基于 composer 的机制自动加载类</span>
<span>require</span>(__DIR__ . '/../vendor/autoload.php'<span>);
</span><span>//</span><span> 引入 Yii 框架的文件 Yii.php</span>
<span>require</span>(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'<span>);

</span><span>//</span><span> 引入 web 的 config 文件,并将返回值即配置项放入 $config 变量中</span>
<span>$config</span> = <span>require</span>(__DIR__ . '/../config/web.php'<span>);

</span><span>//</span><span> new 一个 yii\web\Application 的实例,并执行它的 run 方法
// 用 $config 作为 yii\web\Application 初始化的参数</span>
(<span>new</span> yii\web\Application(<span>$config</span>))->run();
Copy after login

可以看到其核心代码,就只有最后一句,我们所有的请求的处理都是通过 run 方法去调用执行的,内部的具体内容之后会讲解。

Yii2 其实还有另外一个入口,是 Yii2 命令行的入口文件,即顶级目录下的 yii 文件。

yii 文件的内容如下:

<span>#</span><span>!/usr/bin/env php</span>
<?<span>php
</span><span>defined</span>('YII_DEBUG') or <span>define</span>('YII_DEBUG', <span>true</span><span>);

</span><span>//</span><span> fcgi doesn't have STDIN and STDOUT defined by default
// 定义 STDIN 和 STDOUT</span>
<span>defined</span>('STDIN') or <span>define</span>('STDIN', <span>fopen</span>('php://stdin', 'r'<span>));
</span><span>defined</span>('STDOUT') or <span>define</span>('STDOUT', <span>fopen</span>('php://stdout', 'w'<span>));

</span><span>require</span>(__DIR__ . '/vendor/autoload.php'<span>);
</span><span>require</span>(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'<span>);

</span><span>//</span><span> 引入 console 的 config 文件,并将返回值即配置项放入 $config 变量中</span>
<span>$config</span> = <span>require</span>(__DIR__ . '/config/console.php'<span>);

</span><span>//</span><span> new 一个 yii\console\Application 的实例,并执行它的 run 方法
// 用 $config 作为 yii\console\Application 初始化的参数</span>
<span>$application</span> = <span>new</span> yii\console\Application(<span>$config</span><span>);
</span><span>$exitCode</span> = <span>$application</span>-><span>run();
</span><span>//</span><span> 退出</span>
<span>exit</span>(<span>$exitCode</span>);
Copy after login

与 index.php 文件最大的区别在于,它使用的是 yii\console\Application 类,而 index.php 中使用的 yii\web\Application。

这就是 Yii2 的两个入口,如果是 advanced 的项目的话,入口会更多,但基本内容都是这两种形式之一。

今天只是一个简单的开篇,就先到这里。

 

对 Yii2 源码有兴趣的同学可以关注项目 yii2-2.0.3-annotated,现在在上面已经添加了不少关于 Yii2 源码的注释,之后还会继续添加~

有兴趣的同学也可以参与进来,提交 Yii2 源码的注释。

 

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template