99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

YII2項目常用技能知識總結(jié)

發(fā)布時間:2016-08-06 22:08  回復(fù):0  查看:3083   最后回復(fù):2016-08-06 22:08  

學(xué)習(xí)YII和使用的過程中,總結(jié)了一些技能知識點,方便自己的記憶。這里分享給大家。

 

1、不通過日志獲取AR執(zhí)行的原生SQL語句和打印變量數(shù)據(jù)

$query = User::find() ->select(['username'])->where(['id'=>[1,2,3,4])// get the AR raw sql in YII2

$commandQuery = clone $query;echo $commandQuery->createCommand()->getRawSql();$users = $query->all();

打印變量數(shù)據(jù)可以這樣寫://引用命名空間use yii\helpers\VarDumper;//使用

VarDumper::dump($var);//使用2  第二個參數(shù)是數(shù)組的深度  第三個參數(shù)是是否顯示代碼高亮(默認(rèn)不顯示)

VarDumper::dump($var, 10 ,true);

2、從數(shù)據(jù)庫二維數(shù)組中返回一維數(shù)組并配合rules驗證規(guī)則實現(xiàn)分類數(shù)據(jù)過濾。

普通返回表記錄的二維數(shù)組

Member::find()->select('userid')->asArray()->all();

Array

(

    [0] => Array

        (

            [userid] => 1

        )

 

    [1] => Array

        (

            [userid] => 2

        )

 

    [2] => Array

        (

            [userid] => 3

        )

 

)

返回字段的一維數(shù)組

Member::find()->select('userid')->asArray()->column();

或者:

\yii\helpers\ArrayHelper::getColumn(Member::find()->all(), 'userid')

Array

(

    [0] => 1

    [1] => 2

    [2] => 3

)

返回一維數(shù)組配合驗證規(guī)則驗證數(shù)據(jù)正確性,如分類catid正確分為只有1-4,但是在devTools打開修改catid5,提交同樣會到數(shù)據(jù)庫,此時rules驗證規(guī)則如下:

['catid', 'in', 'range' => category::find()->select('id')->asArray()->column()],

當(dāng)然,這個也可以通過下面這樣子寫,一樣的:

['catid', 'in', 'range' => \yii\helpers\ArrayHelper::getColumn(category::find()->all(), 'catid')],

這樣就可以過濾不正確的分類數(shù)據(jù)了!

3、友好時間表示方法

之前一直使用自定義的友好時間函數(shù)。幾天前發(fā)現(xiàn)萬能的YII已經(jīng)提供了友好時間訪問,代碼如下:

Yii::$app->formatter->asRelativeTime('1447565922'); //2小時前

4、使用不同的響應(yīng)類型或者自定義響應(yīng)類型

有效的格式:

 

FORMAT_RAW

 

 

FORMAT_HTML

 

 

FORMAT_JSON

 

 

FORMAT_JSONP

 

 

FORMAT_XML

 

JSON響應(yīng)

public function actionIndex()

{

    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

    $items = ['some', 'array', 'of', 'data' => ['associative', 'array']];

    return $items;

}

返回:

{

    "0": "some",

    "1": "array",

    "2": "of",

    "data": ["associative", "array"]

}

自定義響應(yīng)格式

讓我們創(chuàng)建一個定制的響應(yīng)格式。例子做點有趣和瘋狂的事我返回PHP 數(shù)組。 首先,我們需要格式化程序本身。創(chuàng)建 components/PhpArrayFormatter.php

<?phpnamespace app\components;use yii\helpers\VarDumper;use yii\web\ResponseFormatterInterface;class PhpArrayFormatter implements ResponseFormatterInterface

{

    public function format($response)

    {

        $response->getHeaders()->set('Content-Type', 'text/php; charset=UTF-8');

        if ($response->data !== null) {

            $response->content = "<?php\nreturn " . VarDumper::export($response->data) . ";\n";

        }

    }

}

組件配置:

return [

    // ...

    'components' => [

        // ...

        'response' => [

            'formatters' => [

                'php' => 'app\components\PhpArrayFormatter',

            ],

        ],

    ],

];

現(xiàn)在是準(zhǔn)備使用。在 controllers/SiteController 創(chuàng)建一個新的方法 actionTest:

public function actionTest()

{

    Yii::$app->response->format = 'php';

    return [

        'hello' => 'world!',

    ];

}

返回如下:

<?phpreturn [

    'hello' => 'world!',

];

5、AR入庫前時間通過在模型重寫behaviors方法實現(xiàn)優(yōu)雅入庫方式。

如下:

public function behaviors()

{

    return [

        'timestamp' => [

            'class' => TimestampBehavior::className(),

            'attributes' => [

                ActiveRecord::EVENT_BEFORE_INSERT => 'creation_time',

                ActiveRecord::EVENT_BEFORE_UPDATE => 'update_time',

            ],

            'value' => function() { return date('U'); // unix timestamp },

        ],

    ];

}

6、除配置組件記錄不同級別日志外,也可以自定義在某個地方記錄LOG日志

use yii\log\Logger;

\Yii::getLogger()->log('User has been created', Logger::LEVEL_INFO);

7 ActiveForm類不讓生成label標(biāo)簽

//方法一,通過ActiveForm

$form->field($model, '字段名')->passwordInput(['maxlength' => true])->label(false) ?>

//方法二,通過 HTML

Html::activeInput($type,$model,'字段名')

Yii2給必填項加星,樣式如下:

div.required label:after {

    content: " *";

    color: red;

}

 

 

原文來自:博客園/sandea

您還未登錄,請先登錄

熱門帖子

最新帖子

?