Yii2系列教程:安装及Hello World
安装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
,你就可以看到下面的页面了:
这里需要说明的是:我是在mac下进行的开发,并且处于便捷的原因,我后续也会一直使用PHP内置服务器,也就是说本教程的localhost:8999
是我默认的首页地址。至于用MAMP for OS X的用户,你可以直接配置MAMP
cd /Applications/MAMP/htdocs
ln -s ~/Desktop/helloYii/ /Applications/MAMP/htdocs/helloYii
然后你可以访问这样的地址:http://localhost:8888/helloYii/web
,不出意外,你也可以看Yii
默认的可爱首页了。
对于用Windows的同学,我建议你们直接用WAMP,不过具体配置我倒是没有实际操作过,所以不做任何评论。
关于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
试试,不出意外这时你看到的是这样的:
然后我们再来访问 : `http://localhost:8999/site/say?target=少年,还是用Yii吧
虽然说在这里演示用中文不太和谐,但是没办法,我得安利一下各位少年,上手Yii2吧。
第一篇先写到这里了吧,下一篇打算再说说Yii2
的MVC
,Fomrs
和Layouts
这几个知识点。
Happy Hacking
源码会放在Github:https://github.com/JellyBool/helloYii
Yii2系列教程:安装及Hello World的更多相关文章
- Yii2系列教程七:Behaviors And Validations
这一篇文章的开头就无需多言了,紧接着上一篇的内容和计划,这一篇我们来说说Yii2的Behavior和Validations. Behavior 首先我们来说说Behavior,在Yii2中Behavi ...
- Yii2系列教程四:实现用户注册,验证,登录
上一篇写了一点点Yii2的数据库相关知识和强大的Gii,这一篇就如上一篇的最后所说的一样:在Yii2中实现用户的注册和登录. 你可以直接到Github下载源码,以便可以跟上进度,你也可以重头开始,一步 ...
- Yii2系列教程六:集成编辑器
上一篇文章我们实现了简单的用户权限管理,至于更先进的RBAC,我后面会单独出一篇文章来说说.在这一篇文章当中,我主要想写的是在Yii2中集成一个编辑器,因为在我们的实际开发当中,一个简单的textar ...
- Yii2系列教程五:简单的用户权限管理
上一篇文章讲了用户的注册,验证和登录,这一篇文章按照约定来说说Yii2之中的用户和权限控制. 你可以直接到Github下载源码,以便可以跟上进度,你也可以重头开始,一步一步按照这个教程来做. 鉴于本教 ...
- Yii2系列教程三:Database And Gii
上一篇文章我们理了一下Yii2的MVC,Forms和Layouts,这篇文章就直接按照约定来说说Yii2与数据库相关的一些事情,如果你觉得不够的话,不急,更具体的用法我会在后续的教程给出,并且这里也会 ...
- Yii2系列教程二:MVC,Forms和Layouts
上一篇文章我们简单地实现了Yii2框架安装和Hello World,而在这一篇文章当中,我们会带着好奇之心去探索一下在Yii2中的几个重要的元素组成:MVC,Forms和Layouts. 本文的目标是 ...
- 史上最详细的Android Studio系列教程一--下载和安装
链接地址:http://segmentfault.com/a/1190000002401964#articleHeader4 原文链接:http://stormzhang.com/devtools/2 ...
- Django环境安装--Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- python基础系列教程——Python库的安装与卸载
python基础系列教程——Python库的安装与卸载 2.1 Python库的安装 window下python2.python3安装包的方法 2.1.1在线安装 安装好python.设置好环境变量后 ...
随机推荐
- 【转】使用者角度看bionic pthread_mutex和linux futex实现
使用者角度看bionic pthread_mutex和linux futex实现 本文所大篇幅引用的参考文章主要描述针对glibc和pthread实现:而本文的考察代码主要是android的bioni ...
- 【Linux驱动学习】SD卡规范学习
摘要: 学习SD卡的相关规范,包括定义,硬件特性,数据传输,命令系统等.不涉及代码. 文章针对Linux驱动开发而写,以助于理解SD卡驱动,不会涉及过多硬件内容. 纲要: 1. SD卡介绍 2. SD ...
- maven修改本地仓库默认路径问题
找到maven本地路径的settings.xml文件,如D:\Program Files\apache-maven-3.0.5\conf\settings.xml: 在settings.xml文件中增 ...
- linux中直接进行系统调用和通过C库调用的示例
深入了解LINUX,这方面内容不可少,这段时间再补补.. #include <syscall.h> #include <unistd.h> #include <stdio ...
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(10)-音乐和音效
本章音效文件都来自于公共许可: http://files.cnblogs.com/mignet/sounds.zip 在游戏中,播放背景音乐和音效是基本的功能. Libgdx提供了跨平台的声音播放功能 ...
- 【cocos2d-js官方文档】十一、cc.path
概述 该单例是为了方便开发者操作文件路径所设计的.定义为cc.path的目的是为了跟nodejs的path保持一致.里面定义的api也基本跟nodejs的path模块一致,但不全有,今后可能还会继续根 ...
- 8、Django实战第8天:session和cookie自动登录机制
因为http是无状态协议,因此,并不会记录用户的登录状态.在早期,是直接把用户名和密码等信息存储在浏览器的cookie来实现记录用户密码登录. 但是这样存在安全隐患,只要别人登录你的电脑cookie信 ...
- [BZOJ3684]大朋友和多叉树
设答案为$f_s$,它的生成函数为$\begin{align*}F(x)=\sum\limits_{i=0}^\infty f_ix^i\end{align*}$,则我们有$\begin{align* ...
- MyBasic架构
MyBasic架构图 2,架构图解析 (1) (2) (3)
- cssz中<a>标签鼠标选中去除选中边框
IE: <a href="#" hidefocus="true"></a> 非IE: a:focus { outline:none; } ...