YII框架入门

一、安装

php运行环境安装包:http://www.phpstudy.net/a.php/207.html

Yii安装包:

https://github.com/yiisoft/yii2/releases/download/2.0.6/yii-basic-app-2.0.6.tgz (Yii2的基本应用程序模板)

https://github.com/yiisoft/yii2/releases/download/2.0.6/yii-advanced-app-2.0.6.tgz (Yii2的高级应用程序模板)

下载 Yii2的基本应用程序模板 完毕后解压到网站根目录。

我的网站根目录是:F:\testyii

域名是:www.testyii.com

访问 http://www.testyii.com/requirements.php 检查安装环境。

注意php版本必须是5.4以上。

配置cookie验证密钥: 文件 F:\testyii\config\web.php 里面有个 cookieValidationKey 项 随便给个abcd字符即可

访问 http://www.testyii.com/web/index.php 看到 Congratulations! 表示安装完毕了。

二、控制器

控制器文件地址:F:\testyii\controllers

创建格式:

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        echo ‘hello word‘;
    }
}

访问格式:请求入口?r=控制器名/操作名

例如:http://www.testyii.com/web/index.php?r=test/index

注意访问这里的控制器名与操作名不区分大小写。

控制器父类源代码是 F:\testyii\vendor\yiisoft\yii2\web\Controller.php

控制可以使用父类的public方法和属性 例如使用跳转方法 redirect($url, $statusCode = 302)

三、接收变量

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        $request = YII::$app->request; //通过全局类 YII 得到请求组件 $request
        $id = $request->get(‘id‘,‘default‘); //通过请求组件的get方法得到GET传递过来的数据
        echo $id; //如果传递了 id 则输出id 没有传递 则输出 default
    }
}

请求组件的源代码是 F:\testyii\vendor\yiisoft\yii2\web\Request.php

里面有很多方法可供使用 例如接受POST变量的 post 方法

三、SESSION 处理

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        $session = YII::$app->session; //得到session组件 $session
        $session->open(); //开启session
        $session[‘name‘] = ‘张三‘; //写入session
        $name = $session[‘name‘]; //读取session
        unset($session[‘name‘]); //删除session中的某个值
        $session->destroy(); //销毁session
        echo $name;
    }
}

上面的代码中,我通过YII全局类得到$session组件,这个组件是一个对象,但是紧接着我却把它当作数组进行操作。是因为session组件实现了php内置的ArrayAccess接口。

session组件的源码是:F:\testyii\vendor\yiisoft\yii2\web\Session.php

四、COOKIE 处理

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间
use yii\web\Cookie;

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        //得到响应组件里面的cookies对象
        $cookies = YII::$app->response->cookies;
        //等待写入的cookie数据
        $cookie_1 = array(‘name‘=>‘age‘,‘value‘=>18);
        $cookie_2 = array(‘name‘=>‘gender‘,‘value‘=>‘male‘);
        //add方法接受一个Cookie类生成的对象
        $cookies->add(new Cookie($cookie_1)); //写入cookie
        $cookies->add(new Cookie($cookie_2));
        echo $cookies[‘age‘]; //读取cookie
        unset($cookies[‘age‘]); //删除cookie
    }
}

注意这里的代码又 use 了一个命名空间。

Cookie类的源码是:F:\testyii\vendor\yiisoft\yii2\web\Cookie.php

从源码中可看到,等待写入cookie的数组,除了name value 外 还可以有 domain expire path secure httpOnly 等数据

响应组件里面的cookies对象的生成类源码:F:\testyii\vendor\yiisoft\yii2\web\CookieCollection.php

从源码中可以看到 它有个 getValue($name, $defaultValue = null) 方法也很实用。

五、数据模型

准备两张表:

CREATE TABLE `user` (
  `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘用户ID‘,
  `uname` varchar(20) NOT NULL DEFAULT ‘‘ COMMENT ‘用户名‘,
  `upass` varchar(50) NOT NULL DEFAULT ‘‘ COMMENT ‘密码‘,
  PRIMARY KEY (`uid`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT=‘用户表‘;

CREATE TABLE `log` (
  `log_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL DEFAULT ‘0‘ COMMENT ‘操作者id‘,
  `content` varchar(8000) NOT NULL DEFAULT ‘‘ COMMENT ‘操作内容‘,
  `create_time` int(11) NOT NULL DEFAULT ‘0‘ COMMENT ‘创建时间‘,
  PRIMARY KEY (`log_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT=‘用户操作日志表‘;

配置Yii连接数据库的信息:F:\testyii\config\db.php

<?php

return [
    ‘class‘ => ‘yii\db\Connection‘,
    ‘dsn‘ => ‘mysql:host=localhost;dbname=test‘, //指定数据库
    ‘username‘ => ‘root‘,
    ‘password‘ => ‘root‘,
    ‘charset‘ => ‘utf8‘,
];

模型文件地址:F:\testyii\models

创建模型:

文件夹 F:\testyii\models 下有个 User.php 与我刚才创建的User表名字有冲突,我把它做个备份,然后创建一个新的 User.php

模型的名字与类名字与表名字保持一致。

<?php
namespace app\models; //模型必须放在 这个命名空间中

use yii\db\ActiveRecord; //模型继承的类的命名空间

class User extends ActiveRecord {

}

ActiveRecord 类的源码地址:F:\testyii\vendor\yiisoft\yii2\db

使用模型之插入数据:

插入表单之前我先在模型中创建一个验证规则,更多关于验证器的信息 http://www.yiichina.com/doc/guide/2.0/tutorial-core-validators

<?php
namespace app\models; //模型必须放在 这个命名空间中

use yii\db\ActiveRecord; //模型继承的类的命名空间

class User extends ActiveRecord {
    public function rules() {
        return [
            [[‘uname‘, ‘upass‘], ‘trim‘], //去掉空格
            [[‘uname‘, ‘upass‘], ‘required‘], //必须填写
            [‘uname‘, ‘string‘, ‘min‘=>5, ‘max‘=>20 ], //限制字符长度
            [‘upass‘, ‘string‘, ‘min‘=>6, ‘max‘=>50 ],
        ];
    }
}

再回到控制器中,使用user模型插入数据

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间
use app\models\User;

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        $user = new User; //实例化模型对象
        $user->uname = ‘zhangsan‘; //待插入的数据
        $user->upass= ‘888888‘;
        //验证数据 成功返回 true 失败 返回 false
        if(!$user->validate()) die(‘error‘);
        $uid = $user->save(); //插入数据
        $uid = $user->attributes[‘uid‘]; //得到自增id
        echo $uid;
    }
}

使用模型之查找数据:

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间
use app\models\User;

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        $user = new User; //实例化模型对象
        //1.执行一条查询语句
        $sql = "select * from user";
        $results = $user->findBySql($sql)->all(); //all方法返回一个二维数组  one方法返回一维数组
        $one_user = $results[0]->attributes(); //得到一条记录的所有数据
        $one_user_name = $results[0]->uname; //得到一条记录的某个值
        //print_r($one_user);
        //print_r($one_user_name);

        //2.查询一条记录
        $results = User::find()->where([‘uid‘ => 1])->one()->toArray(); //这里直接返回了数组格式
        print_r($results);
    }
}

关于更多的查询信息 http://www.yiichina.com/doc/api/2.0/yii-db-activerecord

使用模型之修改数据:

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间
use app\models\User;

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        $user_obj = User::findOne(1); //得到主键uid为1的数据的对象
        $user_obj->upass = 111111; //修改密码        if ($user_obj->update() !== false) {
            echo ‘update successful‘;
        } else {
            echo ‘update failed‘;
        }
    }
}

使用模型之删除数据:

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间
use app\models\User;

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        $user_obj = User::findOne(1); //得到主键uid为1的数据的对象
        if ($user_obj->delete() !== false) {
            echo ‘delete successful‘;
        } else {
            echo ‘delete failed‘;
        }
    }
}

使用模型之关联查询:

下面演示用户表关联用户日志表的关联操作。

给log表插入两条记录

INSERT INTO `log` VALUES (‘1‘, ‘2‘, ‘呵呵‘, ‘10‘);
INSERT INTO `log` VALUES (‘2‘, ‘2‘, ‘哈哈‘, ‘20‘);

再创建一个日志模型 F:\testyii\models\Log.php。

<?php
namespace app\models; //模型必须放在 这个命名空间中

use yii\db\ActiveRecord; //模型继承的类的命名空间

class Log extends ActiveRecord {

}

再回到控制器中

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间
use app\models\User;
use app\models\Log;

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        //一对多关系的查询
        $user_obj = User::findOne(2);
        $logs = $user_obj->hasMany(‘app\models\Log‘,[‘uid‘=>‘uid‘])->asArray()->all(); //第一个uid是 log表的 第二个uid是user表的
        //print_r($logs);
        //一对一关系的查询
        $log_obj = Log::findOne(1);
        $user = $log_obj->hasOne(User::className(),[‘uid‘=>‘uid‘])->asArray()->one(); //这段代码最好放在 Log 模型里面
        print_r($user);
    }
}

六、视图

视图文件地址:F:\testyii\views\控制器名\视图名.php

创建视图:F:\testyii\views\test\index.php

<?=$name?>
<?=$age?><?=print_r($age)?>

调用视图:

<?php
namespace app\controllers; //控制器的命名空间

use yii\web\Controller; //控制器继承的 Controller 类的命名空间
use \YII; //框架全局类的命名空间

class TestController extends Controller //控制器命名格式 名称Controller 驼峰法命名 文件名(TestController.php)与类名一致
{
    public function actionIndex() { //操作命名格式 action操作名
        $result = array(‘name‘=>‘张三‘,‘age‘=>18,‘arr‘=>array(‘a‘,‘b‘));
        return $this->renderPartial(‘index‘,$result); //调用视图 并把变量注入到视图中
    }
}

视图中安全输出数据:

<?php
    use yii\helpers\Html; //转义
    use yii\helpers\HtmlPurifier; //过滤
?>
<?=Html::encode($name)?>
<?=HtmlPurifier::process($name)?>

关于视图的更多信息 http://www.yiichina.com/doc/guide/2.0/structure-views

时间: 2024-09-27 11:44:05

YII框架入门的相关文章

使用Yii框架完整搭建网站流程入门

下载地址: http://www.yiiframework.com/ http://www.yiichina.com/ 由美籍华人薛强研究而出, Yii 这个名字(读作易(Yee))代表 简单(easy), 高效(efficient)和可扩展(extensible). 基于MVC,纯OOP,强大 基本配置要求:数据库:mysql,php5.0.1以上:pdo,[图片等需开启gd库模块] 下载完成,解压后,通过127.0.0.1或localhost访问其文件夹,可以查看requirements文件

Yii Framework入门教程

1    Yii是什么? 什么是Yii,Yii的官方解释可以概括为以下几点: Yii是一个高性能.组件化.面向大型Web应用的PHP开发框架.1. Yii的设计完全面向对象,基于完整的MVC编程思想:2. Yii的发音类似于英文Yee[ji:],或者汉语普通话的“易”:3. Yii是开源软件,基于BSD许可发布.4. 更多信息可参考Yii官方网站: http://www.yiiframework.com/   2    MVC是什么? 上文中提到MVC,到底什么是MVC呢: MVC -> M-V

php的yii框架下开发环境xampp,vim,xdebug,DBGp的搭建

php的yii框架下开发环境xampp,vim,xdebug,DBGp的搭建 选择Linux桌面环境Deepin2014.1下开发网站的理由很简单,能截图,有搜狗输入法,可以WPS文档记录,终端下复制粘贴很容易,相比ubuntu,fedora死机次数少了,对,就是不用折腾,自带的. 先说vim和DBGp插件. Deepin2014.1简体中文,自带的vim7.4版本,很多配置已经很适合大陆的人使用了,比如Php和Python的调试支持等,不需要重新编译了.可以节省不少步骤.这里提供一个vim的配

使用Yii框架中遇到的三个问题

以下由我们在信易网络公司开发项目的时候终结出的一些经验 1.main.php文件中欲引入全局变量的问题 还原一下此问题:在Yii框架中,main.php一般会作为整个应用的配置文件,保存Application的各种参数,直接return数组.在使用的过程中,因为main.php文件一定会被Yii提前加载,所以将一些全局性的操作也放在了此文件,加载一些类操作啥的没有什么问题,当有一次加了一个全局变量,并且在其它地方使用global获取全局变量时,发现无论我如何努力都得到的是NULL.各种尝试后,终

Yii框架 400 错误

YII  400错误 在YII框架中400错误是csrf校验失败的意思 csrf是什么? CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用. 所以,如果你自己没有csrf校验机制,严禁关闭csrf. 怎么关呢? public $enableCsrfValidation=false;  设置 为false为成员变量 如果不关.怎么

Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 &#39;AR模式&#39;]

public function getMinLimit () {        $sql = "...";        $result = yii::app()->db->createCommand($sql);        $query = $result->queryAll();         return array (                $query [0] ['max'],         );    } $connection=Yii::

YII框架的依赖注入容器

依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象. 所谓的依赖就是,一个对象,要使用另外一个对象才能完成某些功能.那么这个对象就依赖于被使用的对象. 例如: /** * 厨师 */ class cook { /** * 制作食物 */ public function cooking() { $food = new food(); echo $food->get(),"汤<br/>"; } } /*

Yii框架配置

1.将yii框架命令行工具yiic.bat的路径加入环境变量,以便可以使用CMD命令创建项目 2.创建项目: framework是yii的核心,尽量保持核心包的完整性以后创建多个项目时可以共用,在framework同级的目录创建一个自己的项目文件夹,如:webapp CMD创建项目:>yiic webapp ../webapp/myblog(因为配置的环境变量是在framework下,故返回上层找webapp) 尊重原创,转载请保留:(Yii框架配置)http://www.cnblogs.com

yii框架之gii创建数据表对应的model类

一.首先是在数据库中建立工程需要的表: 二.然后,配置对应文件: 在工程目录下yiiProject\protected\config\main.php.在50行定义了db应用组件,下面后一段注释掉了的mysql的链接配置项,我们将未注释的db注释掉,然后打开mysql链接代码并填写相关信息即可完成mysql链接配置项. 即,把下面代码         'db'=>array(             'connectionString' => 'sqlite:'.dirname(__FILE_