Yii常用機能マニュアル
44014 ワード
インストール
yii 2イニシャルプログラムのインストール
yii 2拡張テンプレートプログラムのインストール
詳細はGitHub公式サイトを参照
composerを通ります.jsonインストール拡張
ローカルcomposer拡張ライブラリの更新
composer拡張子を直接インストール
DAO
Yiiのデータベースはオブジェクトを読み込み,PDOの上にDAOの後ろにQuery BuilderとARがある.
データベース接続の取得
データベースクエリ文の実行
SQL文データ挿入{{SQLぶん:でーたそうにゅう}}
配列形式挿入データ
データの一括挿入
データの更新
データの削除
すべてのデータを取得(配列形式で返される)
データの取得(1 D配列)
値の取得
列を取得(配列に配置)
Logging
ログ機能
trace
info
warning
error
Validator
データ検証、モデルで最もよく使用されるrules()関数
required必須値
Email検証
Boolean検証
Captcha検証コード
compare比較
date検証
default検証
double/number検証
配列の各要素の検証
exist検証の有無
file検証
イメージ検証
ip検証
Inメソッド検証
integer検証
正規照合検証
safe検証(modelを設定するためのattributeが多い)
string検証
Uniqueユニーク検証
ユーザー名の検証
url検証
Session Cookie
Sessionはアプリケーションコンポーネントにカプセル化され、Yii::$app->sessionによって直接アクセスされる.CookieはRequestとResponseによって動作する.
セッションを取得
セッションが開いているかどうかを確認します
セッションを開く
セッションを閉じる
セッションに登録されているすべてのデータを破棄
セッションにアクセス
セッションの設定
セッション変数を削除
セッション変数が存在するかどうかを確認します
Cookie
クッキーの取得
クッキーの設定
クッキー値を取得
もう1つのクッキー値の取得方法
配列方式クッキー値取得
クッキーが存在するかどうかを確認します
クッキーを追加
クッキーを削除
Request
Requestはアプリケーションコンポーネントとして構成されており、Yii::$app->requestでアクセスできます.
現在のリクエストの絶対urlを取得
要求URLのhostInfo部分を返します
URL疑問符取得後のパラメータ文字列
サーバポートに戻る
ユーザーが受け入れたコンテンツのタイプを返します.
ユーザーが受け入れられる言語を返す
GET/POSTリクエストに戻る
判定要求タイプ(booleanを返す)
ユーザのIPを返す
Response
Requestと同様に、ResponseはYiiのコンポーネントにカプセル化されており、Yii:$app->responseで簡単にアクセスできます.
Statusコードの設定
Yii内蔵の異常形式でステータスコードを返す
他のStatus Codeを投げ出す
設定を追加Http Headersコンテンツを削除
add a Pragma header. Existing Pragma headers will NOT be overwritten.
set a Pragma header. Any existing Pragma headers will be discarded.
remove Pragma header(s) and return the removed Pragma header values in an array
レスポンスボディ
JSON形式に戻る
ActiveForm
クエリは配列形式を返します
Html
Htmlクラスのいくつかの静的方法によってHtmlタグが生成される.
ハイパーリンクの生成
Yii 2のルーティングでリンクを生成
画像リンクを生成
ボタンを生成
メールリンクの送信
順序リストの生成
不要なリストの生成
javascriptコードの生成
スタイルコードの生成
cssリファレンスリンクを生成
jsファイルリファレンスの生成
文字"(より大きい)をHTMLエンティティに変換
特色のあるHTMLエンティティを>と<に変換
Alias
定義と使用
別名の定義
別名を取得
Yiiフレームワークが存在するディレクトリを取得
実行中のアプリケーションのルートディレクトリ
Composerサードパーティライブラリのディレクトリ
bowerライブラリの場所
npmライブラリの場所
実行時にファイルパスを保存
index.phpが存在するディレクトリ
現在適用されているルートURLは、主にフロントエンドに使用されます.
アドバンスド-汎用フォルダ
アドバンスド版-フロントアプリケーションの場所
高度版-バックグラウンドアプリケーションの場所
コマンドラインライブラリの場所
Query Builder
クエリー文でのDAOの煩雑な問題を主に解決し、元のSQL文を入力することなくデータベース検索を完了します.
Query Builderで使用するクラス
SELECT法
FROMメソッド
重複レコードのフィルタ
WHERE関数の使い方
個別に説明するexists
ORDER BYメソッド
GROUP BY && HAVING
生成されたSQL文の取得
すべての結果を取得
レコードを取得
データベースにテーブルが含まれているかどうかを確認します.
取得count
値の取得
カラム値の取得
userテーブルの内容を取得
参照先:
[1] http://www.yiiframework.com/doc-2.0/guide-index.html [2] http://nai8.me/tool-sc.html
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