💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
> 原文出处:https://jellybool.com/post/programming-with-yii2-getting-started-with-install-and-hello-world 嗯,今天起打算写一个系列教程来过一遍[Yii2](http://www.yiiframework.com/),没错,我就是来安利大家使用`Yii2`的。至于最爱的`Laravel`,后面是打算会有教程的,只是不知道是系列博文还是直接录视频而已,因为`Laravel`貌似想讲的东西实在是太多了。给`Laravel`发完金水之后,还是回到`Yii2`本身吧。 额,如果你还没听说过什么是`Yii`,可以直接看下面的链接: [http://www.yiiframework.com/](http://www.yiiframework.com/) ## 安装Yii2 打算从头开始,所以,连安装`Yii2`也稍微写一点吧。安装`Yii2`最好的方式就是使用`composer`: ~~~ composer global require "fxp/composer-asset-plugin:~1.0.3" composer create-project --prefer-dist yiisoft/yii2-app-basic helloYii ~~~ 等待一小段时间之后(如果等太久或直接报错,请使用VPN),在这两步你应该会看到类似下面的信息: ~~~ Updating dependencies (including require-dev) - Installing fxp/composer-asset-plugin (v1.0.3) Downloading: 100% Writing lock file Generating autoload files > yii\composer\Installer::postCreateProject chmod('runtime', 0777)...done. chmod('web/assets', 0777)...done. chmod('yii', 0755)...done. ~~~ 这里的第一条命令跟官方文档的有稍微的差别,官方文档还是停留在`fxp/composer-asset-plugin:~1.0.0`,在我写这篇文章的时候,最新版本为`fxp/composer-asset-plugin:~1.0.3`。所以这里会有一些些不一样。 > 注,我直接将`helloYii`项目放在了桌面,你可以根据自己的喜好调整目录 安装完`Yii2`之后,进入到项目的`web/`目录: ~~~ cd helloYii/web ~~~ 开启PHP内置服务器: ~~~ php -S localhost:8999 ~~~ 然后再浏览器输入`localhost:8999`,你就可以看到下面的页面了: ![替代文字](https://box.kancloud.cn/2015-08-15_55cf2bfba4eab.png) 这里需要说明的是:我是在mac下进行的开发,并且处于便捷的原因,我后续也会一直使用PHP内置服务器,也就是说本教程的`localhost:8999`是我默认的首页地址。至于用[MAMP for OS X](https://www.mamp.info/en/)的用户,你可以直接配置`MAMP` ~~~ cd /Applications/MAMP/htdocs ln -s ~/Desktop/helloYii/ /Applications/MAMP/htdocs/helloYii ~~~ 然后你可以访问这样的地址:`http://localhost:8888/helloYii/web`,不出意外,你也可以看`Yii`默认的可爱首页了。 对于用Windows的同学,我建议你们直接用[WAMP](http://www.wampserver.com/en/),不过具体配置我倒是没有实际操作过,所以不做任何评论。 关于Yii2 MVC的支持就基本不用多说了,之前发过一篇文章粗略地说过一遍。而在这里我想说明的是:在Yii2中,我们的单入口文件是`web/index.php`,所以刚刚在开启PHP内置服务器的时候需要来到这个目录,不过如果你直接指定也是可以的。这个文件负责将Yii2项目所需要的东西全部加载完成之后,最后通过`run`方法来使得整个项目可以跑起来: ~~~ <?php // comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); $config = require(__DIR__ . '/../config/web.php'); (new yii\web\Application($config))->run(); ~~~ 默认的情况下,我们看到的Yii2首页是`/controllers/SiteController.php`下的`Index`方法: ~~~ public function actionIndex() { return $this->render('index'); } ~~~ 通常情况下,控制器一般都会有比较多的方法来链接模型和视图之间的桥梁,但是方法虽多,很多时候都只是一些简单的代码和逻辑,所以,不用担心。 上面的`Index`方法渲染了`index`这个模版,而这个模板位于`/views/site/index.php`,至于控制器和视图之间的命名规则,参考这里: ~~~ views/ControllerID/ViewName.php ~~~ `ControllerID` : 表示控制器的`ID`,也就是控制器去掉`Controller`的前缀,比如`SiteController`就对应`site` `ViewName` : 是对应方法的名字,但是不包括`action`字眼,比如`actionIndex`对应的是`index.php` 而在使用`render`方法来渲染视图的时候,`Yii2`默认地也会渲染载入`/views/layouts/main.php`这个文件,而这个文件做的事就是载入一些html头部的共用文件,比如`js`,`css`,导航栏和底部繁荣导航栏等。这里其实我们最值得关心的其实就是下面这段代码的`<?= $content ?>`: ~~~ <?= Breadcrumbs::widget([ 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?> <?= $content ?> </div> ~~~ 这个`<?= $content ?>`可以说就是我们之后定义视图的内容,我们后续创建的视图文件会被读成字符串的形式赋给`$content`,然后进行渲染显示。 ## Hello World 有了上面的安装和基本知识之后,我们就可以自己动手来创建一个页面了。不过在创建页面之前,我们先来做一点简单的配置:开启Yii2的`enablePrettyUrl`模式,因为这样对于后续的开发会便捷很多,而且开启之后,我们的url也会变得很简洁又好,不想现在这样: ~~~ http://localhost:8999/index.php?r=site%2Fabout ~~~ 这是我点击首页导航栏的`About`出现的`url`,一看到这个,我是拒绝的,所以来到`/config/web.php`这个配置文件中,找到`'components' => []`这个数组,加入下面的两行代码: ~~~ 'urlManager' => [ 'showScriptName' => false, 'enablePrettyUrl' => true ], ~~~ 加入之后,正确的代码配置是长成这个样子的: ~~~ 'components' => [ 'urlManager' => [ 'showScriptName' => false, 'enablePrettyUrl' => true ], 'request' => [ ~~~ 这样开启`enablePrettyUrl`模式之后,我们就可以通过`http://localhost:8999/site/about`来访问我们的`About`页面了,这里的规律是这样的: ~~~ http://localhost:8999/ControllerID/ActionName ~~~ 比如,我们在`/controllers/SiteController.php`创建一个`Say`操作方法: ~~~ public function actionSay($target = 'World') { return $this->render('say', ['target' => $target]); } ~~~ 我们要访问这个方法的正确路径就是`http://localhost:8999/site/say` 。 在Yii中使用`action`关键字前缀来区分用于url操作方法和其他方法,这里的`actionSay`接收一个参数`$target`,如果用户在访问的时候传入target参数,`target`就为用户传入的值,而如果用户没有传入,我们将其默认值设为World。有了控制器的方法,从`$this->render('say', ['target' => $target])`这行代码来看,我们需要需要创建一个`say.php`模板文件,这个文件是在哪里的呢? 根据前面说的视图模板规则,它应该位于:`/views/site/say.php`。在里面简单写上下面这一小段代码: ~~~ <?php use yii\helpers\Html; ?> <h1>Hello <?= Html::encode($target) ?></h1> <p>Welcome to your Yii2 demonstration application.</p> ~~~ 出于安全的因素考虑,我们在`say.php`这个模版文件中使用了`yii\helpers\Html`类来对用户传入的数据进行过滤,所以我们才有了这样的输出: ~~~ <?= Html::encode($target) ?> ~~~ 我们来访问`http://localhost:8999/site/say`试试,不出意外这时你看到的是这样的: ![替代文字](https://box.kancloud.cn/2015-08-15_55cf2bfc13059.png) 然后我们再来访问 : `[http://localhost:8999/site/say?target=少年,还是用Yii吧](http://localhost:8999/site/say?target=%E5%B0%91%E5%B9%B4%EF%BC%8C%E8%BF%98%E6%98%AF%E7%94%A8Yii%E5%90%A7) ![替代文字](https://box.kancloud.cn/2015-08-15_55cf2bfc46fa7.png) 虽然说在这里演示用中文不太和谐,但是没办法,我得安利一下各位少年,上手Yii2吧。 第一篇先写到这里了吧,下一篇打算再说说`Yii2`的`MVC`,`Fomrs` 和`Layouts`这几个知识点。 **Happy Hacking** 源码会放在Github:[](https://github.com/JellyBool/helloYii)[https://github.com/JellyBool/helloYii](https://github.com/JellyBool/helloYii)