yii2的使用

通过归档文件安装或者通过composer下载放在自己的项目中,接下来开始使用yii2。

认识yii2.0

  • 什么是yii框架?

快速,安全,专业的php框架。

  • yii框架有什么用?

非常适合开发web2.0网站,博客,社区网站,sns,分享服务,内容管理系统,电子商务网站,restful web服务这些应用,yii框架都是不错的选择。

  • 为什么要用yii框架

    • 开发快

    yii框架自带了丰富的功能,包括ActiveRecord,缓存,身份验证和RBAC,脚手架,单元测试这些功能,可显著缩短开发时间
    • 代码优雅

yii框架严格按照MVC设计代码,清晰分离逻辑层,代码严谨优雅,可维护性高

  • 安全可靠

yii框架的措施包括了输入验证,输入过滤,sql注入和跨站点脚本的预防。

yii2.0运行原理初探

yii请求道响应的生命周期

用户通过入口脚本index.php,加载配置文件,启动应用(application),解析路由,请求处理组件,创建控制器,创建动作执行过滤,通过模型(从数据库)加载数据,通过视图方法渲染视图,响应处理组件,响应给用户。

生命周期
  • 用户向入口脚本 web/index.php
    发起请求。
  • 入口脚本加载应用配置 并创建一个应用实例去处理请求。
  • 应用通过请求组件 解析请求的路由
  • 应用创建一个控制器实例去处理请求。
  • 控制器创建一个动作实例并针对操作执行过滤器。
  • 如果任何一个过滤器返回失败,则动作取消。
  • 如果所有过滤器都通过,动作将被执行。
  • 动作会加载一个数据模型,或许是来自数据库。
  • 动作会渲染一个视图,把数据模型提供给它。
  • 渲染结果返回给响应组件。
  • 响应组件发送渲染结果给用户浏览器。
    应用主体
    1.应用主体
  • 是管理Yii应用系统整体结构和生命周期的对象
  • 是yii\web\Application类的实例
  • 可以用\Yii::$app来访问应用

视图

  • 视图是mvc模式中view这一部分。
  • 视图实在yii\web\view应用组件的帮助下,依据视图模板文件,进行构造和渲染完成的。
  • 习惯上称视图模板文件为视图。
  • 视图模板文件主要是通过html代码和展示类php代码组成的。
  1. 视图的布局layout

<?php

/* @var $this \yii\web\View */
/* @var $content string */

use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use frontend\assets\AppAsset;
use common\widgets\Alert;

AppAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="<?= Yii::$app->language ?>">
<head>
    <meta charset="<?= Yii::$app->charset ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?= Html::csrfMetaTags() ?>
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>
<body>
<?php $this->beginBody() ?>

<div class="wrap">
    <?php
    NavBar::begin([
        'brandLabel' => 'My Company',
        'brandUrl' => Yii::$app->homeUrl,
        'options' => [
            'class' => 'navbar-inverse navbar-fixed-top',
        ],
    ]);
    $menuItems = [
        ['label' => 'Home', 'url' => ['/site/index']],
        ['label' => 'About', 'url' => ['/site/about']],
        ['label' => 'Contact', 'url' => ['/site/contact']],
    ];
    if (Yii::$app->user->isGuest) {
        $menuItems[] = ['label' => 'Signup', 'url' => ['/site/signup']];
        $menuItems[] = ['label' => 'Login', 'url' => ['/site/login']];
    } else {
        $menuItems[] = '<li>'
            . Html::beginForm(['/site/logout'], 'post')
            . Html::submitButton(
                'Logout (' . Yii::$app->user->identity->username . ')',
                ['class' => 'btn btn-link']
            )
            . Html::endForm()
            . '</li>';
    }
    echo Nav::widget([
        'options' => ['class' => 'navbar-nav navbar-right'],
        'items' => $menuItems,
    ]);
    NavBar::end();
    ?>

    <div class="container">
        <?= Breadcrumbs::widget([
            'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
        ]) ?>
        <?= Alert::widget() ?>
        <?= $content ?>
    </div>
</div>

<footer class="footer">
    <div class="container">
        <p class="pull-left">© My Company <?= date('Y') ?></p>

        <p class="pull-right"><?= Yii::powered() ?></p>
    </div>
</footer>

<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>

1.什么是布局

布局是一种特殊的视图,表现多个视图的公共部分。

2.如何创建布局

布局也是视图,它可像普通视图一样创建布局默认存储在@app/view/layouts里

3. 如何变换布局

  • 更改布局

$this->layout = 'wx';

  • 禁用布局

$this->layout = false;

4.布局文件的数据

$this 和 $content

  • $this指向 yii\web\view 来管理和渲染这个视图文件。
  • $content是视图模板文件渲染出来的结果

应用主体

1.应用主体

  • 是管理yii应用系统整体结构和生命周期的对象
  • 是yii\web\application类的实例
  • 可以用\yii::$app来访问应用

2.应用主体的配置

  • $config变量给应用主体这个对象的属性进行初始化赋值。
  • $config变量是从配置文件web.php加载而来的

3.应用主体的属性

  • id 用来区分其他应用主体的标识id
  • basePath 应用根目录
  • defaultRoute 默认打开的路由

表单

1.表单的创建

在yii 中主要是通过 yii\widgets\ActiveForm 类来创建表单。

  • ActiveForm::begin()不仅创建了一个表单实例,同时也标志着表单的开始。
  • 放在ActiveForm::begin() 与 ActiveForm::end()之间的所有内容都被包裹在Html的<form>标签中。
<?php

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model \frontend\models\ContactForm */

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\captcha\Captcha;

$this->title = 'Contact';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-contact">
    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.
    </p>

    <div class="row">
        <div class="col-lg-5">
            <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>

                <?= $form->field($model, 'name')->textInput(['autofocus' => true]) ?>

                <?= $form->field($model, 'email') ?>

                <?= $form->field($model, 'subject') ?>

                <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>

                <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
                    'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
                ]) ?>

                <div class="form-group">
                    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>
                </div>

            <?php ActiveForm::end(); ?>
        </div>
    </div>

</div>

2.ActiveField对象的使用

<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true])->hint('please enter your name')->label('Name') ?>
<?= $form->field($model, 'email')->input('email') ?>

3. 额外的标签处理

表单中,存在一些和模型对象没有关系的,额外的HTML标签,比如submitButton我们可以:

  • 使用纯HTML
  • 使用yii\helpers\Html 帮助类中的方法来添加到表单中
 <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>

4. 块赋值

input中的name,实际是以对象名来命名一个数组,数组的键对应模型的属性。

模型执行load方法,就是对每个属性执行这样一句赋值。

$model->name = isset($ContactForm['name']) ? $contactForm['name'] : null;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,019评论 4 62
  • 我是255号星宝宝糕点女王小杨,正在参加日记星球21天蜕变第六期第9天。今天的日记是一个迷失的故事。 有一个商人...
    糕点女王小杨阅读 177评论 1 2
  • 一、Masonry介绍 之前我们在屏幕适配的章节中学习过AutoLayout的使用,但那都是在可视化界面上进行添加...
    无沣阅读 2,114评论 0 1
  • 记|执直之智 信徒之门 此门之内 诗书天下 此门之外 仗剑天涯 每一段路 都是一种领悟 羌塘怀望 拉萨吉祥 华电所...
    执直之智阅读 317评论 11 12