美文网首页
yii2的使用

yii2的使用

作者: 套路师 | 来源:发表于2017-05-05 15:38 被阅读0次

    通过归档文件安装或者通过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;
    

    相关文章

      网友评论

          本文标题:yii2的使用

          本文链接:https://www.haomeiwen.com/subject/mkbjtxtx.html