zoukankan      html  css  js  c++  java
  • yii2实战教程之第一个Yii程序

    之前考虑过要不要砍掉该章节,直接上手教你搭建简单的博客系统。出于实战基础加之自C语言的书籍出版以来,几乎所有的编程书籍都讲述了一个Hello World的例子作为开始。虽然我们仅仅是学习Yii2,但是好歹我们这也是高大上的Yii嘛,我们也尊重传统,来一段Hello World快速入门!
    我将学会什么

    • 了解到MVC设计模式中的V和C是什么
    • 如何创建一个操作(action)
    • 如何创建对应的视图文件(模板)
    • 简单了解到操作的命名规范
    • 什么是路由

    开始之前的准备
    Yii是什么?为什么要学Yii呢?是啥,就是一个框架,如果要加一些形容词,我觉得高性能、易扩展等词最适合不过了。

    MVC相信就不用多说了,Yii2无疑更好的基于MVC对代码进行了一定的组织。简洁优雅不说......我们还是不拍yii马屁了,说重点。

    我们知道,客户端像服务端发起一个请求,服务端是必须要有对应的响应地址才是可以的。这个响应的地址在Yii2中又是怎么进行描述的呢?先来介绍下什么是操作。

    操作,其实就是一个action(action是动作的意思),也可以描述为我们前面说的响应地址。TA是控制器(controller)的组成部分,再说白了其实就是类(class)的操作方法(function)。

    如何创建一个操作呢?给类创建一个方法你会不,非要说的那么白才明白不是太好,对吧。

    也就是说我们需要先有一个类(控制器)呗,没错!如下示例就是包含了两个操作 index 和create的控制器test。

    namespace frontendcontrollers; 
    use yiiwebController; 
    class TestController extends Controller 
    { 
        public function actionIndex () { 
        } 
        public function actionCreate () { 
        } 
    } 

    有同学要较真了,控制器不是test吗,为啥你的是TestController?还有啊,说好的操作名是index和create为啥你的都有前缀action?controller跟action去掉可不可以?答:不可以,必须带上!Yii2规定:声明的控制器必须带上Controller后缀,同时操作必须带上前缀action!

    通常情况下,控制器用来处理请求有关的资源类型,其实就是做一些操作的,比如我们要处理文章之类的数据,控制器应命名为Article恰当些,尽量做到见名知意。Action当然也是如此,比如我们要创建一篇文章,action理应为add或者create为妙。

    那有同学要说了,我就想叫操作名为createArticle怎么办?天儿热,先凉拌着,慢慢说。

    yii2中操作名(action)遵循驼峰式命名,也就是说如果你是多个单词,请保证你的命名规则是actionCreateArticle而不是actionCreatearticle!当然,这只是一种规范,你不这样做也没人拦你。需要提醒注意的是多个单词驼峰式命名,访问操作的时候,多个单词需要像create-article这样用连接符连接而不是createArticle哦

    接下来我们访问已经创建好的操作:

    首先我们先配置下域名advanced.dev指向frontendweb目录,我们后文所指的该域名均指向这里
    在frontendcontrollers目录下新建TestController.php文件,内容参考上面我们创建Test控制器的代码
    地址栏输入 http://advanced.dev/index.php?r=test/index 访问看看结果,我们会发现一片空白,什么也没有!很明显,我们的的操作方法index里空空如也,没做任何输出。要不我们做点什么?别急,我们先来看看这个地址,TA究竟做了什么,为什么能请求到我们指定的操作。

    这就需要我们引入一个新的概念-路由。感觉挺好哈,这名字都没听过。不过不要紧,我换个说法你就明白了,访问地址,路由就是我们的访问地址!明白了吧,TA就是用于定位控制器操作的地址!我们这里重点是讲明白概念,不做深究,具体细节需要的可以去查看官方文档。

    输出Hello World!
    该明白的该说的都说了,饶了一大圈终于该说本篇文章的重点了-输出Hello World。艾玛,可把我憋坏了。

    public function actionIndex () { 
        echo "Hello World!"; 
    }

    现在在回过来看看,是不是很简单!

    我们改变点什么,看看如何动态的输出Hello Ketty,Hello Anmy?

    public function actionIndex ($name) { 
        echo "Hello {$name}!"; 
    }

    该操作方法接收一个参数name,理应程序上会输出Hello, xxx的字样。

    现在我们依然访问 http://advanced.dev/index.php?r=test/index 会发现页面报错了,提示错误缺少参数:name!也就是说,我们访问该操作时应该传进来一个参数name!我们把地址修改为 http://advanced.dev/index.php?r=test/index&name=Kitty ,这个时候页面正常输出了Hello Kitty!手动修改地址栏的name值,页面上输出的内容也会随之进行改变!

    我们知道,操作其实就类似MVC中的C层,C层也就是处理业务逻辑的一层,如此一来,像上面在控制器的操作方法中输出内容明显就不太合适了。

    既然要输出内容,我们看看Yii2的V层又是如何进行操作(此操作非彼操作,不要妄加揣摩)的呢?

    我们引入新的概念-视图。视图是啥?说白了就是我们的模版文件。我们先在frontendviews新建文件夹test,然后在test下创建一个视图文件index.php,文件内容如下

    <div class="test-index"> 
        <h1>Hello World!</h1> 
    </div>

    说明一点:frontednviews下面创建的文件夹应与控制器保持一致,如此一来才方便我们对很多文件进行管理。

    接下来看看如何才能对视图index.php进行操作?

    public function actionIndex ($name) { 
        // echo "Hello {$name}!"; 
        return $this->render('index'); 
    }

    仅仅是在之前的操作index内写了一行代码,用于操作视图文件。此时我们很有必要在视图文件内动态输出Hello xxx!这个时候只需要在render方法传递参数即可。

    // controller 
    public function actionIndex ($name) { 
        // echo "Hello {$name}!"; 
        return $this->render('index', [ 
            'name' => $name, 
        ]); 
    } 
    
    
    //view 
    <div class="test-index"> 
        <h1>Hello <?= $name ?>!</h1> 
    </div> 

    如此一来,我们既掌握了视图,又实现了我们想要输出的Hello xxx!

    但是,这个时候,如果我们地址栏输入的参数name值等于,我们想要的结果是Hello !实际上并非如此!如此一来,就难免会遭遇XSS攻击!为了安全起见,页面上输出的信息我们很有必要安全地处理一下!

    <div class="test-index"> 
        <h1>Hello <?= yiihelpersHtml::encode($name) ?>!</h1> 
    </div>

    实际上这里我们也仅仅是简单的谈了一下如何避免XSS跨站攻击。

    下一节我们将要直接开讲简单的博客管理系统,本篇我们主要涉及的基本概念 操作、视图、路由等,希望你能掌握透彻,有任何问题下方均可留言交流!

    [考虑目前国内网站大部分采集文章十分频繁,更有甚者不注明原文出处,原作者更希望看客们查看原文,以防有任何问题不能更新所有文章,避免误导!]

    查看原文

  • 相关阅读:
    (原创)C++ 同步队列
    (原创)用C++11的std::async代替线程的创建
    C语言宏应用-------#define STR(X) #X
    c++中数据表如何转成业务实体--map和结构体的相互转换
    线程池的陷阱
    java中map和对象互转工具类的实现示例
    3.python元类编程
    人生苦短,我用python(目录)
    11.多线程、多进程和线程池编程
    10.python3实用编程技巧进阶(五)
  • 原文地址:https://www.cnblogs.com/wwolf/p/5542062.html
Copyright © 2011-2022 走看看