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

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

WBOY
Freigeben: 2016-06-13 08:53:01
Original
858 Leute haben es durchsucht

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>
Nach dem Login kopieren

可以看到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();
Nach dem Login kopieren

可以看到其核心代码,就只有最后一句,我们所有的请求的处理都是通过 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>);
Nach dem Login kopieren

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

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

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

 

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

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

 

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage