学习yii2.0——基础入门
声明:本文内容来自于yiichina.com的权威指南。
安装
推荐使用composer来安全,可能有点慢(要下载的依赖比较多)。
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
启动
yii框架的入口文件是web/index.php。但是在访问yii框架之前,如果不是使用composer来安装yii框架的话,那么就需要修改config/web.php中的cookieValidationKey,这个值是用来验证cookie的。
如果是通过composer安装的话,那么就不用再手动添加cookieValidationKey,因为composer已经帮忙添加了。
配置虚拟主机或者直接访问入口文件,都行。
本地访问localhost/basic/web/index.php,即可看到运行结果。
创建控制器(controller)以及动作(action)
需要注意以下几点:
1、控制器是放在controllers/目录下的
2、文件名要和控制器(类名)相同。
3、控制器名称的格式为XyzController。
4、要将控制器声明在app\controllers这个命名空间下。
5、声明的控制器要继承yii的控制器,使用use yii\web\Controller即可。该类的位置是vendor/yiisoft/yii2/web/Controller.php,这个类继承yii\base\Controller。
6、控制器可以有多个动作,动作的命名规范是actionAbc()。
下面是一个简单的HelloController.php
<?php
namespace app\controllers; use yii\web\Controller; class HelloController extends Controller {
public function actionIndex()
{
echo "hello yii";
}
}
访问控制器和动作
格式为:localhost/basic/web/index.php?r=hello/index。
index.php后面的r表示路由;hello对应的是控制器HelloController;index对应的是控制器中的actionIndex动作。
如果action是index,那么访问的时候,不用在写index了,因为index是默认的动作(在缺省action的时候)。也就是说,如果只写了controller,那么默认的访问这个controller中的index动作。
设置默认的控制器和动作
在config/web.php中的$config数组中增加"defaultRoute" => "hello/index"即可。
设置之后,缺省控制器和动作的时候,默认会访问HelloController中的actionIndex方法。
每一个控制器都有一个属性,这个属性是$defaultAction,默认值为index,可以通过修改这个值来修改默认action。
创建模型(model)
和创建控制器一样,有以下规则:
1、控制器是放在models/目录下的
2、文件名要和模型(类名)相同。
3、模型名默认是没有限制的,如果继承了ActiveRecord类的话,那么模型名称应尽量和数据库表名相同。
4、要将模型声明在app\models这个命名空间下。
5、声明的模型要继承yii的模型基类,使用use yii\base\Model即可。该类的位置是vendor/yiisoft/yii2/base/Model.php。
<?php
namespace app\models; use yii\base\Model; class Demo extends Model {
public function showContent() {
print_r(array(__CLASS__, __METHOD__));
}
}
在控制器中使用模型
首先要在控制器中导入模型,使用use关键字。
这里尝试在HelloController中使用上面的Demo模型。
<?php
namespace app\controllers; use yii\web\Controller;
use app\models\Demo; // 导入模型 class HelloController extends Controller {
public function actionIndex()
{
// echo "hello yii";
$demo = new Demo();
$demo->showContent();
}
}
访问localhost/web/index.php?r=hello/index,可以得到如下输出:
Array ( [0] => app\models\Demo [1] => app\models\Demo::showContent )
创建视图
创建视图时,需要注意以下几点:
1、视图都是保存在views目录下。
2、对于控制器XyzController来说,在views目录下,应该有一个xyz目录,这个目录保存的就是XyzController使用的视图文件。
3、在视图中访问控制器传递的参数值时,直接echo数组中的$key即可
比如,我要为HelloController创建视图,那么我就在views目录下,创建了一个hello目录,在这个目录下创建一个index.php文件,这个文件的内容为:
<h1><?php echo $item;?></h1>
控制器中加载视图
<?php
namespace app\controllers; use yii\web\Controller;
use app\models\Demo; // 导入模型 class HelloController extends Controller {
public function actionIndex()
{
return $this->render("index", array("item" => "this is item"));
}
}
访问localhost/basic/web/index.php?r=hello/index即可看到结果。
创建并使用自定义的布局文件
上面的运行结果也许你有点意外,因为运行之后居然外层居然有样式,这是因为加载视图的时候使用的是render方法,render方法会在加载视图的同时,也会加载一个布局文件。
每一个控制器都有一个属性,$layout,可以通过修改这个属性,来修改加载哪一个布局文件。
布局文件存放的目录是在views/layouts目录下,默认只有一个main.php,这个文件就是布局文件,可以查看其中的内容,需要注意的是,加载的视图文件在显示的时候,是被当做一个变量值输出,<?= $content ?>,$content就是包含控制器分配的数据以及视图文件。其他的内容都是属于布局。
布局文件是公用的,所有的控制器都可以使用。
现在创建一个自定义的布局文件,simple.php,放在/views/layouts目录下。
<h1>this is header</h1>
<?= $content ?>
<h1>this is footer</h1>
然后在HelloController加载视图之前修改默认的布局。
<?php
namespace app\controllers; use yii\web\Controller; class HelloController extends Controller {
//这个布局文件,在所有的action中都有效
public $layout = "simple"; //定义默认的action
public $defaultAction = "index"; public function actionIndex()
{
//修改的布局文件只在这个action中有效
$this->layout = "simple";
return $this->render("index", array("item" => "this is content"));
}
}
访问localhost/basic/web/index.php?r=hello/index,可以看到下面这个结果:
不使用布局文件
可以使用renderPartial方法,和render方法功能类似,主要的区别就是不使用布局,即使自己指定了布局文件,也是不会使用布局的。
接收请求参数
接受请求可以使用request组件,需要注意的是,需要导入yii框架的核心类
<?php
namespace app\controllers; use Yii; //导入框架核心类
use yii\web\Controller; class HelloController extends Controller {
public function actionIndex()
{
$request = Yii::$app->request; // 判断请求的方法
// if ($request->isAjax) { echo"该请求是一个 AJAX 请求"; }
// if ($request->isGet) { echo"请求方法是 GET"; }
// if ($request->isPost) { echo"请求方法是 POST"; }
// if ($request->isPut) { echo"请求方法是 PUT"; } // $get = $request->get(); //等价于$_GET
// $post = $request->post(); //等价于$_POST //获取指定的key值,如果没有值的话,则返回null,不会报错
// $name = $request->post("name"); //等价于$_POST['name']
// $age = $request->get("age"); //等价于$_GET['age'] // 如果没有接受到参数时,使用默认参数
// $gender = $request->get("gender", "male");
// $addr = $request->get("addr", "BeiJing"); // 头部信息,比如token
$token = $request->headers->get("token");
echo $token;
}
}
request组件还有很多属性和方法,具体的可以查看:https://www.yiichina.com/doc/guide/2.0/runtime-requests
如果在发起post请求时,出现400错误,
解决方案:在控制器中关闭CSRF验证:public $enableCsrfValidation = false;
响应请求
和请求request组件对应的响应组件response,同样需要当如Yii核心类。
<?php
namespace app\controllers; use Yii; //导入框架核心类
use yii\web\Controller; class HelloController extends Controller {
public $enableCsrfValidation = false;
public function actionIndex()
{
$response = Yii::$app->response; // 设置状态码
// $response->statusCode = 400; //设置和追加header信息
$response->headers->set("key", "one");
$response->headers->add("key", "two"); // 设置响应主体的格式,yii框架会自动设置header的Content-Type
// $response->format = \yii\web\Response::FORMAT_JSON;
// return ["code" => 0, "msg" => "success"]; //重定向,默认302,可设置为永久重定向301
// return $this->redirect('https://www.so.com', 302); //在入口文件中自定义的常量:defined('BASEURL') or define('BASEURL', __DIR__ . '../../');
$response->sendFile(BASEURL."/controllers/SiteController.php");
}
}
session
session在yii框架中也对应一个组件。
<?php
namespace app\controllers; use Yii; //导入框架核心类
use yii\web\Controller; class HelloController extends Controller {
public $enableCsrfValidation = false;
public function actionIndex()
{
$session = Yii::$app->session;
$session->open(); //开启session,等同于session_start();
// $session->set("name", "abcdef");
$name = $session->get("name");
echo $name;
$session->close(); //关闭session
$session->destroy();
}
}
cookie
在yii框架中,有两种cookie:
1、请求中携带的cookie,使用Yii::$app->request->cookies;
2、服务器发给客户端的cookie,使用Yii::$app->response->cookies;
<?php
namespace app\controllers; use Yii; //导入框架核心类
use yii\web\Controller;
use yii\web\Cookie; //导入yii框架的cookie类 class HelloController extends Controller { public $enableCsrfValidation = false; // 获取请求中的cookie
public function actionGetcookie()
{
$request_cookies = Yii::$app->request->cookies;
$response_cookies = Yii::$app->response->cookies; //获取请求中的cookie
// 如果没有值的话,返回null
echo $name = $request_cookies->getValue("username");
// 如果没有设置值的话,使用默认值
echo $age = $request_cookies->getValue("age", 30);
echo $pwd = $request_cookies->getValue("pwd");
if ($request_cookies->has("gender")) {
echo $request_cookies->getValue("gender");
} //修改或添加cookie,返回给客户端
//使用yii框架的方法,实例化yii框架的cookie类作为参数。
$response_cookies->add(new Cookie(array("name"=>"gender", "value" => "femle", "expire" => time() + 60, )));
$response_cookies->add(new Cookie(array("name"=>"age", "value" => 30)));
$response_cookies->add(new Cookie(array("name"=>"username", "value" => "abcd")));
$response_cookies->add(new Cookie(array("name"=>"pwd", "value" => "123456")));
$response_cookies->remove("pwd");
}
}
学习yii2.0——基础入门的更多相关文章
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- ECMAScript 6.0基础入门教程
ECMAScript 6.0基础入门教程 转:https://blog.csdn.net/hexinyu_1022/article/details/80778727 https://blog.csdn ...
- Yii2.0基础框架
前言:最近在用php写一个项目的接口,所以需要学习一下Yii的框架,也在这里记录一下. 整体结构 ssets文件夹:assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问p ...
- 【Yii系列】Yii2.0基础框架
缘起 因为一个月的短暂停留,我在给朋友搞事情,所以Yii系列的文章耽搁了很长时间,现在又重拾当时的知识,给大伙好好撸下这一系列的博客 提起Yii,虽然是国外的开发者搞的,但是它的作者是华人,这才是让我 ...
- 0基础入门学习Python(第3章)
第三章 成为高手前必须知道的一些基础知识 3.1 变量 一个值的名字,存储在内存中,我把把这块内存称为变量,大多数语言,把这个过程称之为,给变量赋值,把值存储在变量中. Python这里的做法稍有不同 ...
- 0基础入门学习Python(第5章)
列表,元组和字符串 5.1 列表:一个打了激素的数组 有时候可能需要将一些相互之间有关联的数据保存在一起,这个就叫数组.Python将其称为列表. 5.1.1 创建列表 >>> [1 ...
- 0基础入门学习Python(第4章)
第四章,了不起的分支和循环 4.1 分支和循环 Python主要依靠缩进来区分代码块 4.2 快速上手 成绩按照分数来划分等级,90分以上为A,80~90 为B,60~80 为C,60以下为D p4_ ...
- 0基础入门学习Python(第1-2章)
第一章:就这么愉快的开始吧 1.1获取Python Python3.7 1.2从idle启动 Python 3.7.3 (default, Mar 27 2019, 09:23:39)[Clang 1 ...
- 《马哥出品高薪linux运维教程》wingkeung学习笔记-linux基础入门课程
计算机原理概念: 1.CPU和内存中的存储单元通信线路称为总线(BUS),总线是被指令和数据复用的,所以也称为前端总线. 2.计算机中计算频率的时间标准即晶体振荡器原理,精确计算时间长度,根据相同的时 ...
随机推荐
- synchronized关键字用法
看到网上很多讲synchronized关键字用法的文章,说的都很有道理,也很深刻,但是看完总感觉脑袋里还是有点乱乱的.经过一番自己的思考后,想从自己的思考角度出发,来说一说synchronized关键 ...
- 【转】.htaccess详解及.htaccess参数说明
.htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到 ...
- Linux系统学习之软件安装
一.源码包编译安装 由于计算机无法直接执行用高级语言编写的源程序,因此想要运行程序,就需要一种机制来让计算机识别,这样程序才可能运行起来.一般来说,计算机中存在解释型和编译型两种语言. 所谓解释型语言 ...
- 'style-loader', 'css-loader'使用
'style-loader', 'css-loader'使用 1.安装 npm install style-loader css-loader --save-dev 2.配置 webpack.conf ...
- Spring与SpringMVC的区别
Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring. 简单点的话可以将SpringMVC类比于Strut ...
- Python脱产8期 Day01
一 编程语言与目的 1.有特定语法,可以通过编程的方式,让计算机进行识别,从而让计算机根据人的意愿完成人想让其完成的事 2.控制奴役计算机,让其完成你想让它完成的事,从而解放人力. 二 计算机 五大组 ...
- EasyUI panel
1.脚本生成panel 2.panel属性 3.panel事件 4.panel方法 一 脚本生成panel <div id="tt"></div> < ...
- java 面向对象基本概念
1.面向对象与面向过程 (1).都是解决问题的思维方式,都是代码组织的方式. (2).解决简单问题可以使用面向过程 (3).解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程. 2.面向对 ...
- ThreadGroup其实比ExecutorService更好
用java做抓取的时候免不了要用到多线程的了,因为要同时抓取多个网站或一条线程抓取一个网站的话实在太慢,而且有时一条线程抓取同一个网站的话也比较浪费CPU资源.要用到多线程的等方面,也就免不了对线程的 ...
- Spring Boot 之订制 logo
Spring Boot 之订制 logo 简介 变量 配置 编程 源码 引申和引用 Spring Boot 启动时默认会显示以下 logo: . ____ _ __ _ _ /\\ / ___'_ _ ...