当前位置: 首页 > news >正文

YII

一、Introduction

YII,易框架。纯OOP,面向对象的,用了很多设计模式。

二、安装和使用Yii

1.        安装

不同于ci和tp等,yii提供两种安装方式,使用composer或者下载应用模版。官网推荐使用前者。根据官网指引,下载windows版的composer-setup.exe,然后安装最新的composer,根据指引下载composer.phar,放到在php.exe的同级目录,在这个目录创建composer.bat,里面写入@php "%~dp0composer.phar" %*,将php.exe添加到环境变量path,运行composer.bat,然后在cmd输入composer –v,查看是否安装成功。然后按照yii官网提示,执行php composer.phar create-project yiisoft/yii2-app-basic basic 2.0.13安装basic版的template或执行php composer.phar create-project yiisoft/yii2-app-advanced advanced2.0.13安装进阶版的,也就是hmvc版的,本质上一样,只是目录结构的复杂度的区别。目录结构中,vendor中放供应商的包,也就是第三方类包,比如yii、smarty、htmlpurifer等,在advanced的目录中,console放控制台脚本,就是cmd运行的php。另外,不同于tp等的是,yii框架的入口文件在web目录下。

2.        使用

在站点下创建项目目录,将yii的basic中所有文件和目录复制到项目目录下。

在浏览器运行项目,运行的前提是设置了config目录下的web.php中的'cookieValidationKey'=> 'K2Jpjy23ujgXhnIltznpy67pLL0ro8rD',设置密钥。

控制器命名要以Controller.php结尾,比如GoodsController.php,控制器需要设置命名空间,类名与文件名相同,方法名以action开头,类似java的ssh框架的一些命名规范,比如:

<?php

namespace app\controllers;
use yii;
use yii\web\controller;
use app\models\Blog;
class BlogController extends Controller
{
                    public function actionLst()
                    {
                                         
                    }
}

模型的命名没有规则,需要继承Model模型,如果这个模型要对应一张表,需要继承ActiveRecord。

<?php

namespace app\models;

use yii;
use yii\base\Model;

class Blog extends Model
{

}

在控制器生成模型,先引入模型,然后使用new关键字;或者不引入而是直接只用路径。引入类,非常类似java中使用类时的引入。也是yii面向对象的一个体现。

$blogModel = new  Blog;

$blogModel = new  \app\models\Blog;

视图,在views下创建与控制器名字一致的目录,比如blog,静态页以php结尾,比如lst.php。

在控制器加载视图和传数据

return $this->render('lst', [

         'name'=> 'tom',

         'age'=> '12',

]);

在视图接收数据直接使用php标签。

在yii访问的url默认是http://www.php2.com/yiiblog/web/index.php?r=blog/lst

在views下面有layout布局文件的目录,使用return会默认使用这个目录下的布局文件。

如果使用自定义的布局,可以在这个目录下创建自己的布局文件,然后在控制器中,定义布局属性,使用自定义的布局文件,比如,创建了mylayout.php的布局文件,在控制器中

//定义布局文件

public  $layout = 'mylayout';

如果不使用布局文件,可以设置public  $layout = false;或者调用renderPartial方法,

                   return$this->renderPartial('lst', [

                            'name'=> 'tom',

                            'age'=> '12',

                   ]);

注意,yii中数组的写法使用了php5.4以后扩展的写法,以中括号括住内容。

三、Yii的代码生成器

1.        准备工作

配置数据库

<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=eshopphp',
    'username' => 'root',
    'password' => '123456',
    'charset' => 'utf8',
    'tablePrefix' => 'es_',
    // Schema cache options (for production environment)
    //'enableSchemaCache' => true,
    //'schemaCacheDuration' => 60,
    //'schemaCache' => 'cache',
];

2.        进入gii页面

http://www.php2.com/yiiblog/web/index.php?r=gii

3.        生成

生成模型,crud等。

4.        在yii中显示中文

在web.config中添加

'language' => 'zh-cn',

5.        资源管理包

yii中的资源管理包,用于管理css、js等文件。比如如果需要在页面中引入样式文件。

$this->registerCssFile('index.css');

$this->registerJsFile('index.js');

四、使用Yii制作一套增删改查翻页

首先,改db.php为要使用的数据库和表前缀。

然后导入日志的模版到views/blog下,制作布局文件。

制作布局文件时推荐使用yii提供的布局的范例,因为yii提供的布局中使用了csrf,防跨站表单提交技术。

然后,把模版中的样式和js文件等复制到web目录下。

设置使用自定义的布局文件,在控制器中,public$layout = 'blog';或者在页面中,<?php$this->context->layout = 'blog'; ?>也可以在视图页设置标题

<?php 
                    //设置标题
                    $this->title = '博客别表';
                    $this->context->layout = 'blog'; ?>

1.        添加

复制add的模板到add.php。

使用gii生成日志模型。

修改生成的模型中的表单验证规则。

修改add.php的提交路径,并在form表单中添加用于csrf的隐藏域,<input name="_csrf" type="hidden"id="_csrf" value="<?= Yii::$app->request->csrfToken?>">

编写控制器

<?php
namespace app\controllers;
use Yii;
use yii\web\controller;
use app\models\Blog;
/**
 * 博客控制器
 */
class BlogController extends Controller
{
                    //定义布局文件
                    // public $layout = 'blog';

                    /*******************************************************/

                    /**
                     * 添加方法
                     */
                    public function actionAdd()
                    {
                                         if(Yii::$app->request->isPost)
                                         {
                                                             //生成模型
                                                             $model = new Blog;
                                                             //接收表单
                                                             $model->attributes = Yii::$app->request->post();
                                                             //添加时间加入模型
                                                             // $model->addtime = date('Y-m-d H:i:s');
                                                             //验证表单并且插入数据库
                                                             if($model->insert())
                                                             {
                                                                                 return $this->redirect(['blog/lst']);
                                                             }
                                                             else
                                                             {
                                                                                 var_dump($model->getErrors());
                                                             }
                                         }
                                         return $this->render('add');
                    }


                    /**
                     * 博客列表页
                     */
                    public function actionLst()
                    {
                                         $blogModel = new Blog;
                                         $blogModel = new \app\models\Blog;
                                         return $this->render('lst', [
                                                             'name' => 'tom',
                                                             'age' => '12',
                                         ]);
                    }
}

2.        翻页搜索

在模型中添加搜索翻页的方法

    /**
     * 翻页和搜索
     */
    public function search($perPage = 5)
    {
        //预查询返回一个query对象
        $query = $this->find();
        /**************************搜索*****************************/
        //设置搜索的条件
        //标题
        $title = Yii::$app->request->get('title');
        if($title)
        {
            $query->andFilterWhere(['like', 'title', $title]);
        }

        /**************************翻页*****************************/
        $page = new Pagination([
            'totalCount' => $query->count(),
            'pageSize' => $perPage,
        ]);

        /************************取数据************************/
        $data = $query->offset($page->offset)->limit($page->limit)->all();
        return [
           'data' => $data,
           'page' => $page,
        ];
    }

在控制器中调用模型中的搜索翻页方法

                   /**
                     * 博客列表页
                     */
                    public function actionLst()
                    {
                                         $model = new Blog;
                                         $data = $model->search(2);
                                         // var_dump($data);die;
                                         return $this->render('lst', $data);
                    }

3.        删除

编写控制器中的delete方法

        /**
                     * 删除方法
                     */
                    public function actionDelete($id)
                    {
                                         $model = new Blog;
                                         $model->findOne($id)->delete();
                                         $this->redirect(['blog/lst']);
                    }

表单中删除按钮

<a class="link-del"onclick="return confirm('确定删除?');"href="<?=Yii::$app->urlManager->createUrl(['blog/delete','id'=>$v['id']])?>">删除</a>

4.        修改

编写控制器的修改方法

        /**
                     * 修改方法
                     */
                    public function actionSave($id)
                    {
                                         //生成模型
                                         $model = new Blog;
                                         //先将要修改的数据放入模型
                                         $model = $info = $model->findOne($id);
                                         if(Yii::$app->request->isPost)
                                         {                                                            
                                                             
                                                             //用修改好的数据覆盖原数据
                                                             $model->attributes = Yii::$app->request->post();                                                   
                                                             //添加时间加入模型
                                                             // $model->addtime = date('Y-m-d H:i:s');
                                                             //验证表单并且修改数据
                                                             if($model->save())
                                                             {
                                                                                  return $this->redirect(['blog/lst']);
                                                             }
                                                             else
                                                             {
                                                                                 //错误信息传到页面
                                                                                 return $this->render('save',
                                                                                                      ['error' => $model->getErrors(), 'info' => $info]
                                                                                 );
                                                             }
                                         }
                                         
                                         return $this->render('save', ['info' => $info]);
                    }

 

相关文章:

  • php实现邮箱验证
  • php微信公众号开发
  • [one_demo_4]不使用第3个变量交换两个变量的值
  • [one_demo_5]命令行输入输出
  • [one_demo_6]逆置整数
  • [one_demo_7]求走到第50个台阶的走法多少种
  • [one_demo_8]十进制转二进制
  • [one_demo_9]判断数组是否递增
  • [one_demo_10]递归解决汉诺塔问题
  • [one_demo_11]二分查找法
  • [one_demo_12]递归打印*\n*.*.\n*..*..\n图形
  • c
  • network
  • 使用javadoc生成项目的帮助文档
  • [one_demo_13]ArrayList去除重复的元素
  • 【347天】每日项目总结系列085(2018.01.18)
  • Angular Elements 及其运作原理
  • axios 和 cookie 的那些事
  • Consul Config 使用Git做版本控制的实现
  • css选择器
  • FastReport在线报表设计器工作原理
  • HashMap ConcurrentHashMap
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • node-glob通配符
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 基于webpack 的 vue 多页架构
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 浅谈Golang中select的用法
  • 提醒我喝水chrome插件开发指南
  • 微服务核心架构梳理
  • 我这样减少了26.5M Java内存!
  • 小程序button引导用户授权
  • 一文看透浏览器架构
  • 在Mac OS X上安装 Ruby运行环境
  • 终端用户监控:真实用户监控还是模拟监控?
  • 主流的CSS水平和垂直居中技术大全
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • HanLP分词命名实体提取详解
  • 阿里云服务器购买完整流程
  • ​什么是bug?bug的源头在哪里?
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • ###C语言程序设计-----C语言学习(6)#
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • %@ page import=%的用法
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)fread与fwrite详解
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (力扣题库)跳跃游戏II(c++)
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)项目管理杂谈-我所期望的新人
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET 动态调用WebService + WSE + UsernameToken