Yii常用機能マニュアル

44014 ワード

インストール
yii 2イニシャルプログラムのインストール
composer global require "fxp/composer-asset-plugin:^1.2.0"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic

yii 2拡張テンプレートプログラムのインストール
composer global require "fxp/composer-asset-plugin:^1.2.0"
composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application
/path/to/php-bin/php /path/to/yii-application/init

詳細はGitHub公式サイトを参照
composerを通ります.jsonインストール拡張
composer install

ローカルcomposer拡張ライブラリの更新
composer update

composer拡張子を直接インストール
composer require [options] [--] [vendor/packages]...

DAO
Yiiのデータベースはオブジェクトを読み込み,PDOの上にDAOの後ろにQuery BuilderとARがある.
データベース接続の取得
$conn = Yii::$app->db;

データベースクエリ文の実行
Yii::$app->db->createCommand("SELECT * FROM `user`");
Yii::$app->db->createCommand("SELECT * FROM `user` WHERE uid=:uid",[":uid"=>1]);
Yii::$app->db->createCommand("SELECT * FROM `user` WHERE uid=:uid")->addValue([":uid"=>1]);

SQL文データ挿入{{SQLぶん:でーたそうにゅう}}
Yii::$app->db->createCommand('INSERT INTO user (email, password) VALUES("[email protected]", "test3");')->execute();

配列形式挿入データ
Yii::$app->db->createCommand()->insert('user', [
'email' => '[email protected]',
'password' => 'changeme7',
'first_name' => 'Test'
])->execute();

データの一括挿入
Yii::$app->db->createCommand()->batchInsert('user', ['email', 'password', 'first_name'],
[
['[email protected]', 'changeme7', 'James'],
['[email protected]', 'changeme7', 'Linda']
['[email protected]', 'changeme7']
])->execute();

データの更新
Yii::$app->db->createCommand()->update('user', ['updated_at' => time()], 'id = 2')->execute();

データの削除
Yii::$app->db->createCommand()->delete('user', 'id = 3')->execute();

すべてのデータを取得(配列形式で返される)
Yii::$app->db->createCommand("SELECT * FROM `user`")->queryAll();

データの取得(1 D配列)
Yii::$app->db->createCommand("SELECT * FROM `user` WHERE id = 1")->queryOne();

値の取得
Yii::$app->db->createCommand("SELECT count(*) AS total FROM `user` WHERE id = 1")->queryScalar();

列を取得(配列に配置)
Yii::$app->db->createCommand("SELECT username FROM `user`")->queryColumn();

Logging
ログ機能
trace
Yii::trace($message,$category) //                   。           。

info
Yii::info($message,$category) //                。

warning
Yii::warning($message,$category) //                     。

error
Yii::error($message,$category) //         ,           。

Validator
データ検証、モデルで最もよく使用されるrules()関数
required必須値
["username",'required']
[["username","email"],'required']
[["username"],'required',"message"=>"{attribute}    "]
[["username"],'required','requiredValue'=>"abei"] //          requiredValue      。

Email検証
["email",'email']
[["email","work_email"],'email']

Boolean検証
['sex', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true]; //       true / false  。

Captcha検証コード
['verificationCode', 'captcha'];

compare比較
['username', 'compare', 'compareAttribute' => 'province','message'=>'username province    '] //        username
['age', 'compare', 'compareValue' => 30, 'operator' => '>=','type' => 'number'];//compareValue:      operator:      type    ,   string,         ,  number       
//operator    ==、===、!=、!==、>、>=、

date検証
["birth","date","format"=>"Y-m-d"]

default検証
['age','default','value'=>null] // age        null
['country','default','value'=>'USA'] //  country      USA
/*   from  , =  +3 ,  to  , =  +6  */
[['from','to'],'default','value'=>function($model,$attribute){
return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days'));
}]

double/number検証
['v','double'] //  v     
['v','double','max'=>90,'min'=>1]//  v          1、    90

配列の各要素の検証
["categoryIds","each","rule"=>['integer']]

exist検証の有無
/*            where    ,             。        ,exist  sql  EXISTS   */
["username","exist"] //username        
["username","exist","targetAttribute"=>"province"] //username       province   
["username","exist",'targetAttribute' => ['username', 'province']] //username       username province   
[["username","province"],"exist",'targetAttribute' => ['username', 'province']] //username province       username province   

file検証
/* maxFiles         ,mimeTypes         */
['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'],'mimeTypes'=>["image/*"], 'maxSize' => 1024*1024,'minSize'=>100*1024,'maxFiles'=>6,'checkExtensionByMimeType'=>true],
###filter      
[['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],
['phone', 'filter', 'filter' => function ($value) {
//normalize phone input here
return $value;
}],

イメージ検証
/*   png/jpg  ,        1000px,        100px,        1000px。        100px */
['primaryImage', 'image', 'extensions' => 'png, jpg','minWidth' => 100, 'maxWidth' => 1000,'minHeight' => 100, 'maxHeight' => 1000]

ip検証
["ip_addess","ip"]

Inメソッド検証
["level","in","range"=>[1,2,3]]

integer検証
["age",'integer'];
["age","integer","max"=>90,"min"=>1]

正規照合検証
["username","match","pattern"=>"/^[a-z]\w*$/i"]

safe検証(modelを設定するためのattributeが多い)
["description","safe"]

string検証
["username","string","length"=>[4,24]];
["username","string","min"=>4];
["username","string","max"=>32];
["username","string","encoding"=>"UTF-8"];

Uniqueユニーク検証
ユーザー名の検証
["username","unique"]
["username","unique","targetAttribute"=>"province"]

url検証
["website","url"]
["website","url","validSchemes"=>["http","https"]]

Session Cookie
Sessionはアプリケーションコンポーネントにカプセル化され、Yii::$app->sessionによって直接アクセスされる.CookieはRequestとResponseによって動作する.
セッションを取得
$session = Yii::$app->session;

セッションが開いているかどうかを確認します
Yii::$app->session->isActive

セッションを開く
Yii::$app->session->open()

セッションを閉じる
Yii::$app->session->close();

セッションに登録されているすべてのデータを破棄
Yii::$app->session->destroy();

セッションにアクセス
/*            */
$language = $session->get('language');
$language = $session['language'];
$language = isset($_SESSION['language']) ? $_SESSION['language'] : null;

セッションの設定
/*            */
$session->set('language', 'en-US');
$session['language'] = 'en-US';
$_SESSION['language'] = 'en-US';

セッション変数を削除
/*            */
$session->remove('language');
unset($session['language']);
unset($_SESSION['language']);

セッション変数が存在するかどうかを確認します
/*            */
if ($session->has('language')) ...
if (isset($session['language'])) ...
if (isset($_SESSION['language'])) ...

Cookie
クッキーの取得
$cookies = Yii::$app->request->cookies;

クッキーの設定
$cookies = Yii::$app->response->cookies;

クッキー値を取得
$language = $cookies->getValue('language', 'en'); //    language  ,   "en"  

もう1つのクッキー値の取得方法
if (($cookie = $cookies->get('language')) !== null) {
$language = $cookie->value;
}

配列方式クッキー値取得
if (isset($cookies['language'])) {
$language = $cookies['language']->value;
}

クッキーが存在するかどうかを確認します
if ($cookies->has('language')) ...
if (isset($cookies['language'])) ...

クッキーを追加
$cookies->add(new \yii\web\Cookie([
'name' => 'language',
'value' => 'zh-CN',
]));

クッキーを削除
$cookies->remove('language');
unset($cookies['language']);

Request
Requestはアプリケーションコンポーネントとして構成されており、Yii::$app->requestでアクセスできます.
現在のリクエストの絶対urlを取得
Yii::$app->request->getAbsoluteUrl();

要求URLのhostInfo部分を返します
Yii::$app->request->getHostInfo();

URL疑問符取得後のパラメータ文字列
Yii::$app->request->getQueryString()

サーバポートに戻る
Yii::$app->request->getServerPort();

ユーザーが受け入れたコンテンツのタイプを返します.
Yii::$app->request-> getAcceptableContentTypes (); //Header Accept

ユーザーが受け入れられる言語を返す
Yii::$app->request-> getAcceptableLanguages(); //Header Accept-Language

GET/POSTリクエストに戻る
Yii::$app->request->get();
Yii::$app->request->get("id");
Yii::$app->request->POST();
Yii::$app->request->POST("username");

判定要求タイプ(booleanを返す)
Yii::$app->request->isAjax //     ajax  
Yii::$app->request->isConsoleRequest //            
Yii::$app->request->isDelete //     DELETE  
Yii::$app->request->isGet //     GET  
Yii::$app->request->isPost //     POST  
Yii::$app->request->isPjax //     isPjax  

ユーザのIPを返す
Yii::$app->request->getUserIP();

Response
Requestと同様に、ResponseはYiiのコンポーネントにカプセル化されており、Yii:$app->responseで簡単にアクセスできます.
Statusコードの設定
Yii::$app->response->statusCode = 200;

Yii内蔵の異常形式でステータスコードを返す
yii\web\BadRequestHttpException: status code 400.
yii\web\ConflictHttpException: status code 409.
yii\web\ForbiddenHttpException: status code 403.
yii\web\GoneHttpException: status code 410.
yii\web\MethodNotAllowedHttpException: status code 405.
yii\web\NotAcceptableHttpException: status code 406.
yii\web\NotFoundHttpException: status code 404.
yii\web\ServerErrorHttpException: status code 500.
yii\web\TooManyRequestsHttpException: status code 429.
yii\web\UnauthorizedHttpException: status code 401.
yii\web\UnsupportedMediaTypeHttpException: status code 415.

他のStatus Codeを投げ出す
throw new \yii\web\HttpException(402); //      ,    HttpException      
throw new \yii\web\HttpException(402,"message");

設定を追加Http Headersコンテンツを削除
$headers = Yii::$app->response->headers;

add a Pragma header. Existing Pragma headers will NOT be overwritten.
$headers->add('Pragma', 'no-cache');

set a Pragma header. Any existing Pragma headers will be discarded.
$headers->set('Pragma', 'no-cache');

remove Pragma header(s) and return the removed Pragma header values in an array
$values = $headers->remove('Pragma');

レスポンスボディ
Yii::$app->response->content = 'hello world!';

JSON形式に戻る
Yii::$app->response->format = Response::FORMAT_JSON;
return $results;

ActiveForm
クエリは配列形式を返します
$command->queryAll(\PDO::FETCH_ASSOC);

Html
Htmlクラスのいくつかの静的方法によってHtmlタグが生成される.
ハイパーリンクの生成
Html::a('     ', $url);

Yii 2のルーティングでリンクを生成
Html::a('    ', Url::to(['/site/index'], true));
Html::a('    ', Yii::$app->urlManager->createUrl(['/site/index']));

画像リンクを生成
Html::img("/images/logo.png",['class'=>'img']);

ボタンを生成
Html::button("    ",['class'=>'button-action']);

メールリンクの送信
Html::mailto("  ",'[email protected]',$options);

順序リストの生成
$list = ['china','usa'];
Html::ol($list);

不要なリストの生成
$list = ['china','usa','japan'];
Html::ul($list);

javascriptコードの生成
Html::script("alert('hello world');")

スタイルコードの生成
Html::style("color:#F60");
Html::style(".list {background:#FFF;}");

cssリファレンスリンクを生成
Html::cssFile("http://baidu.com/style.css",[]);

jsファイルリファレンスの生成
Html::jsFile($url,[]);

文字"(より大きい)をHTMLエンティティに変換
Html::encode($html);

特色のあるHTMLエンティティを>と<に変換
Html::decode($string);

Alias
定義と使用
別名の定義
Yii::setAlias('@baidu', 'http://www.baidu.com');

別名を取得
Yii::getAlias($name);

Yiiフレームワークが存在するディレクトリを取得
Yii::getAlias('@yii')

実行中のアプリケーションのルートディレクトリ
Yii::getAlias('@app')

Composerサードパーティライブラリのディレクトリ
Yii::getAlias("@vendor")

bowerライブラリの場所
Yii::getAlias("@bower");

npmライブラリの場所
Yii::getAlias("@npm");

実行時にファイルパスを保存
Yii::getAlias("@runtime");

index.phpが存在するディレクトリ
Yii::getAlias("@webroot");

現在適用されているルートURLは、主にフロントエンドに使用されます.
Yii::getAlias("@web");

アドバンスド-汎用フォルダ
Yii::getAlias("@common");

アドバンスド版-フロントアプリケーションの場所
Yii::getAlias("@frontend");

高度版-バックグラウンドアプリケーションの場所
Yii::getAlias("@backend");

コマンドラインライブラリの場所
Yii::getAlias("@console");

Query Builder
クエリー文でのDAOの煩雑な問題を主に解決し、元のSQL文を入力することなくデータベース検索を完了します.
Query Builderで使用するクラス
$query = (new \yii\db\Query());
//yii2  Query     SQL     ,   Query Builder  SQL    DAO         。

SELECT法
$query->select("id,username"); //     
$query->select(['id','username']); //    
$query->select(["userId"=>"id","fName"=>"user.frist_name"]); //   
$query->select(["full_name"=>"CONCAT(id,'-',username)"]); //  MYSQL  

FROMメソッド
$query->from("user"); //     
$query->from(["u"=>"user"]); //     

重複レコードのフィルタ
$query->select("username")->distinct()->from("user"); //distinct

WHERE関数の使い方
/*       */
$query->where("id = 1");
$query->where("id = :id")->addParams([":id"=>1]);
$query->where("id = :id",[":id"=>1]);

/*      */
$query->where(["username"=>"abei","age"=>[20,19,26]])->from("user"); //select * from user where username="abei" AND age in (20,19,26)

/*     */
$query->where([">","id",10]); //id > 10
$query->where([","id",10]); //id < 10
$query->where(["<>","id",10]); //id <> 10
$query->where(["in","id",[10,12]]); //id in (10,20)
$query->where(["not in","id",[10,12]]); //id not in (10,20)
$query->where(["and","id=1","id=2"]); id=1 AND id=2
$query->where(['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]]); //(type IN (7, 8, 9) OR (id IN (1, 2, 3)))
$query->where(["between", 'id', 1, 10]); //id between 1 AND 10
$query->where(["not",["id"=>5]]); //not (id=5)
$query->where(["not between","id",1,10]); //id not between 1 AND 10
$query->where(["like","username","abei"]); //username like "%abei%"
$query->where([['like', 'username', ['abei', 'liuhuan']]]); //username like "%abei%" AND username like "%liuhuan%"
$query->where(['like', 'username', '%abei', false]); //username like "%abei"
$query->where(["or like", 'username', ['abei', 'liuhuan']]); //username like "%abei%" OR username like "%liuhuan%",            
$query->where(["not like",xxxxx]); // like    
$query->where(["or not like",xxx]) // not like    

個別に説明するexists
/* EXISTS                  ,               ,     True False */
$query->where(['exists', (new Query())->select('id')->from('user')->where(['id' => 1])]);

ORDER BYメソッド
$query->orderBy("id DESC");
$query->orderBy(["id"=>SORT_DESC]);
$query->orderBy(["id"=>SORT_DESC,'create_time'=>SORT_ASC]);

GROUP BY && HAVING
$query->groupBy(["username"]);
$query->groupBy(["id"])->having([">",'id',20]);

生成されたSQL文の取得
$query->createCommand()->sql;

すべての結果を取得
$query->all(); //    

レコードを取得
$query->one();

データベースにテーブルが含まれているかどうかを確認します.
(new \yii\db\Query)->from('user')->exists();

取得count
$query->count();

値の取得
$query->scalar();

カラム値の取得
$query->column(); //    

userテーブルの内容を取得
$query = new \yii\db\Query;
$query->from("user");
$query->select(["fname"=>"username"]);
$query->where([">",'id',10]);
$query->all();

参照先:
[1] http://www.yiiframework.com/doc-2.0/guide-index.html [2] http://nai8.me/tool-sc.html