• Yii2使用教程


    安装

    中文文档:http://www.yiichina.com/doc/guide/2.0/start-installation

    1,安装

    这里我直接下载归档文件,压缩包安装了。composer各种麻烦,国情你懂得。

    https://github.com/yiisoft/yii2/releases/download/2.0.2/yii-basic-app-2.0.2.tgz

    Yii 2.0 需要 PHP 5.4.0 或以上版本支持。

    解压至我的web目录  E:wampwwwibrain

    2,配置

    config/web.php 第12行

     'cookieValidationKey' => '123',//若你通过 Composer 安装,则此步骤会自动完成

     config/db.php

    return [
        'class' => 'yiidbConnection',
        'dsn' => 'mysql:host=localhost;dbname=ibrain',//数据库配置
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
       'tablePrefix'=>'ib_',//表前缀,默认没有的,自己加上
    
    ];

     ok, 跑 http://localhost/ibrain/web/index.php

    和http://localhost/ibrain/web/index.php?r=site/index?param=value 是完整路径

    运行,看到 Congratulations! 界面了。

    看根目录目录,没有index首页文件,如果访问http://localhost/ibrain会看到目录,如果不想改host配置,那我们可以新增一个index.php咯,指向web/index.php。

    header("Location:web/index.php");die;

    入门HelloWorld

    为了弄清楚运行的机制,我们跑一个helloworld测试。

    首先看/web/index.php

    <?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 yiiwebApplication($config))->run();//这种写法就是5.4以上才支持

    执行后的默认首页,是跑到/controller/SiteController.php  下的actionIndex()去了。然后调用的/view/site/index.html

    那我现在要换掉默认控制器,在/config/web.php 中添加一句  'defaultRoute' => 'index', 这样默认控制器就是/controller/IndexControllor.php的actionIndex()了。不建议修改application.php 下的public $defaultRoute = 'site'; 框架文件最好不要修改。下面是代码

    <?php
    namespace appcontrollers;
    use Yii;
    use yiiwebController;
    
    class IndexController extends Controller
    {
      public function actionIndex()
        {    
            die("Hello world!!");//访问http://localhost/ibrain/index.php?r=index/index 
            //return $this->render('index');// /view/Index/index.html
        }
        public function actionHello()
        {    
            die("Hello world!!!!!");//http://localhost/ibrain/index.php?r=index/hello ,index.php可以省略。
        }
    
    }

     数据库操作

    上面的例子跑起来后,我想要从mysql中取点数据出来耍耍。开头我们的数据库已经配置好了名称为ibrain的数据库。

    添加一张用户表,表结构:

    CREATE TABLE `ib_admin` (
      `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
      `gid` int(8) NOT NULL COMMENT '用户组ID',
      `username` varchar(25) NOT NULL COMMENT '账号',
      `password` varchar(100) NOT NULL COMMENT '密码',
      `nickname` varchar(100) DEFAULT NULL COMMENT '昵称',
      `sort` int(11) DEFAULT NULL COMMENT '排序',
      PRIMARY KEY (`uid`),
      KEY `group` (`gid`),
      KEY `usrname` (`username`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户表';

    下面要用yii来做CURD操作。

    yii2没有空模型,必须实体类来映射表,这点TP的ORM我比较喜欢。

    <?php
    // app/models/Admin.php  声明Admin模型,对应admin表
    namespace appmodels;
    use yiidbActiveRecord;
    class Admin extends ActiveRecord
    {
    
    }
    <?php
    // app/controller/IndexController.php
    
    namespace appcontrollers;
    
    use Yii;
    use yiiwebController;
    use appmodelsAdmin; //引入这个空间,下面才能调用静态方法
    class IndexController extends Controller {
        public function actionIndex() {
            //db方法可以参考yii2db下面的很多数据库操作类,非常丰富
              $res=Admin::findAll(array('gid'=>1));
               var_dump($res);

        $query = Admin::find()->asArray()->all();//如果不想要取出来的数据时对象类型,可以用asArray方法转换成数组
        var_dump($query);

    //插10条记录
            /* for($i=20;$i<=30;$i++){
              $admin=new Admin();
              $admin->gid=$i;
              $admin->username="admin".$i;
              $admin->password="admin".$i;
              $admin->nickname="findgor".$i;
              $admin->sort=$i;
              $admin->insert();//插入数据
              } */
    
            //修改
            /*$row=Admin::findOne(array("uid"=>19));//这是对于数据对象操作
              $row->username="test";
              $row->update(); */
    
            /* 删除
              $row=Admin::findOne(19);
              $row->delete();
             */
        }
    
    }

     下面就是yii的特色菜GII了,快速生成代码,开启和关闭可以在入口文件中指定  yii_env执行环境。

    跑:http://localhost/ibrain/web/index.php?r=gii

    可以创建很多东西,先来个模型吧,model->start

    可以预览生成的文件,使用很简单。参考:http://www.yiichina.com/doc/guide/2.0/start-gii

    再来生成curd:也就是增删改查的代码,会自动生成页面。非常流弊
    
    Model Class:                appmodelsInfo
    
    Search Model Class:     appmodelsInfoSearch
    
    Controller Class:       appcontrollersInfoController
    
    View Path:                   viewsinfo
    

      好了,生成完后,我们可以访问一下,http://localhost/ibrain/web/index.php?r=info . 

    项目演练

    很多东西是需要在做项目中才能发现的,带着问题才能更好的学习,但切记不要一遇到问题就钻牛角尖。

    下面正式修改项目。首先把头部和尾部的修改一下吧。

    尾部在布局文件中,veiwslayoutmain.php

    <?= Yii::powered() ?> 这个在yii2BaseYii.php 465行 powered

    登陆功能:

    http://www.yiichina.com/tutorial/332

     =============================

    在curd生成的页面中,默认的显示往往不足以满足我们,所以下面来改动一下。

    看模板文件内的数据列表。

        <p>
            <?= Html::a('创建信息', ['create'], ['class' => 'btn btn-success']) ?>
        </p>
    
        <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
            'columns' => [
    
                'id',
                'type',
                'title',
                'keyword',
                'content:ntext',
                
                ['class' => 'yiigridActionColumn','header' => '操作', 'headerOptions' => ['width' => '100']],
            ],
           
        ]); ?>

    1.Showing 1-5 of 39 items.  这个统计要改成中文,在基础列表视图类widgetBaseListView.php line:190

    2.显示的标题要修改的话,可以在model写一个attributeLabels()方法

     public function attributeLabels()
        {
            return [
                'id' => '编号ID',
                'type' => '类型',
                'title' => '标题',
                'keyword' => '关键字',
                'content' => '内容',
            ];
        }

    3.要改一页显示的条数,在生成的infosearch.php中添加配置

     public function search($params)
        {
            $query = Info::find();
    
            $dataProvider = new ActiveDataProvider([
                'query' => $query,
                'pagination' => [
                    'pagesize' => '5',//一页显示5条数据
                ]
            ]);

    那么对一个单表的操作也差不多了,但是考虑后台的复杂性,往往会出现:

    1.多表关联查询后的记录 

    2.自定义搜索字段

    3.增加字段操作,比如加一个审核。

  • 相关阅读:
    [Unity工具]json查看工具02:获取Console窗口中的内容
    [Unity工具]json查看工具01:TreeView
    [Unity优化]包体积01:查找资源依赖
    大数据学习day21-----spark04------1. 广播变量 2. RDD中的cache 3.RDD的checkpoint方法 4. 计算学科最受欢迎老师TopN
    大数据学习day20-----spark03-----RDD编程实战案例(1 计算订单分类成交金额,2 将订单信息关联分类信息,并将这些数据存入Hbase中,3 使用Spark读取日志文件,根据Ip地址,查询地址对应的位置信息
    大数据学习day19-----spark02-------0 零碎知识点(分区,分区和分区器的区别) 1. RDD的使用(RDD的概念,特点,创建rdd的方式以及常见rdd的算子) 2.Spark中的一些重要概念
    大数据学习day18----第三阶段spark01--------0.前言(分布式运算框架的核心思想,MR与Spark的比较,spark可以怎么运行,spark提交到spark集群的方式)1. spark(standalone模式)的安装 2. Spark各个角色的功能 3.SparkShell的使用,spark编程入门(wordcount案例)
    大数据学习day17------第三阶段-----scala05------1.Akka RPC通信案例改造和部署在多台机器上 2. 柯里化方法 3. 隐式转换 4 scala的泛型
    大数据学习day16------第三阶段-----scala04--------1. 模式匹配和样例类 2 Akka通信框架
    大数据学习day15----第三阶段----scala03--------1.函数(“_”的使用, 函数和方法的区别)2. 数组和集合常用的方法(迭代器,并行集合) 3. 深度理解函数 4 练习(用java实现类似Scala函数式编程的功能(不能使用Lambda表达式))
  • 原文地址:https://www.cnblogs.com/findgor/p/4087125.html
Copyright © 2020-2023  润新知