config/web.php
//默認訪問控制器
'defaultRoute' => 'country',
$this->render('index');//展示視圖
public $defaultAction = 'home';//默認方法
return $this->redirect('http://example.com'); //重定向
//頁面標題
<?php
$this->title = 'My page title';
?>
<title><?= Html::encode($this->title) ?></title>
//meta
<?php
$this->registerMetaTag(['name' => 'keywords', 'content' => 'yii, framework, php']);
?>
//link
$this->registerLinkTag([
'title' => 'Live News for Yii',
'rel' => 'alternate',
'type' => 'application/rss+xml',
'href' => 'http://www.yiiframework.com/rss.xml/',
]);
請求
$request = Yii::$app->request;
$get = $request->get();
// 等價於: $get = $_GET;
$id = $request->get('id');
// 等價於: $id = isset($_GET['id']) ? $_GET['id'] : null;
$id = $request->get('id', 1);
// 等價於: $id = isset($_GET['id']) ? $_GET['id'] : 1;
$post = $request->post();
// 等價於: $post = $_POST;
$name = $request->post('name');
// 等價於: $name = isset($_POST['name']) ? $_POST['name'] : null;
$name = $request->post('name', '');
// 等價於: $name = isset($_POST['name']) ? $_POST['name'] : '';
$request = Yii::$app->request;
if ($request->isAjax) { /* 該請求是一個 AJAX 請求 */ }
if ($request->isGet) { /* 請求方法是 GET */ }
if ($request->isPost) { /* 請求方法是 POST */ }
if ($request->isPut) { /* 請求方法是 PUT */ }
// $headers 是一個 yii\web\HeaderCollection 對象
$headers = Yii::$app->request->headers;
// 返回 Accept header 值
$accept = $headers->get('Accept');
if ($headers->has('User-Agent')) { /* 這是一個 User-Agent 頭 */ }
//獲取客服端信息
$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;
響應
Yii::$app->response->statusCode = 200; //設置狀態碼
throw new \yii\web\NotFoundHttpException;//拋出
yii\web\BadRequestHttpException:狀態碼 400。
yii\web\ConflictHttpException:狀態碼 409。
yii\web\ForbiddenHttpException:狀態碼 403。
yii\web\GoneHttpException:狀態碼 410。
yii\web\MethodNotAllowedHttpException:狀態碼 405。
yii\web\NotAcceptableHttpException:狀態碼 406。
yii\web\NotFoundHttpException:狀態碼 404。
yii\web\ServerErrorHttpException:狀態碼 500。
yii\web\TooManyRequestsHttpException:狀態碼 429。
yii\web\UnauthorizedHttpException:狀態碼 401。
yii\web\UnsupportedMediaTypeHttpException:狀態碼 415。
throw new \yii\web\HttpException(402);//自定義拋出
//http頭部
$headers = Yii::$app->response->headers;
// 增加一個 Pragma 頭,已存在的Pragma 頭不會被覆蓋。
$headers->add('Pragma', 'no-cache');
// 設置一個Pragma 頭. 任何已存在的Pragma 頭都會被丟棄
$headers->set('Pragma', 'no-cache');
// 刪除Pragma 頭並返回刪除的Pragma 頭的值到數組
$values = $headers->remove('Pragma');
//響應主體
Yii::$app->response->content = 'hello world!';
$response = Yii::$app->response;
$response->format = \yii\web\Response::FORMAT_JSON;
$response->data = ['message' => 'hello world'];
HTML: 通過 yii\web\HtmlResponseFormatter 來實現.
XML: 通過 yii\web\XmlResponseFormatter來實現.
JSON: 通過 yii\web\JsonResponseFormatter來實現.
JSONP: 通過 yii\web\JsonResponseFormatter來實現.
RAW: use this format if you want to send the response directly without applying any formatting.
//瀏覽器跳轉
return $this->redirect('http://example.com/new', 301);
\Yii::$app->response->redirect('http://example.com/new', 301)->send();
//發送文件
return \Yii::$app->response->sendFile('path/to/file.txt');
\Yii::$app->response->sendFile('path/to/file.txt')->send();
一些瀏覽器提供特殊的名爲X-Sendfile的文件發送功能, 原理爲將請求跳轉到服務器上的文件, Web應用可在服務器發送文件前結束,爲使用該功能, 可調用yii\web\Response::xSendFile(), 如下簡要列出一些常用Web服務器如何啓用X-Sendfile 功能:
Apache: X-Sendfile
Lighttpd v1.4: X-LIGHTTPD-send-file
Lighttpd v1.5: X-Sendfile
Nginx: X-Accel-Redirect
Cherokee: X-Sendfile and X-Accel-Redirect
session
$session = Yii::$app->session;
// 檢查session是否開啓
if ($session->isActive) ...
// 開啓session
$session->open();
// 關閉session
$session->close();
// 銷燬session中所有已註冊的數據
$session->destroy();
訪問 Session 數據
可使用如下方式訪問session中的數據:
$session = Yii::$app->session;
// 獲取session中的變量值,以下用法是相同的:
$language = $session->get('language');
$language = $session['language'];
$language = isset($_SESSION['language']) ? $_SESSION['language'] : null;
// 設置一個session變量,以下用法是相同的:
$session->set('language', 'en-US');
$session['language'] = 'en-US';
$_SESSION['language'] = 'en-US';
// 刪除一個session變量,以下用法是相同的:
$session->remove('language');
unset($session['language']);
unset($_SESSION['language']);
// 檢查session變量是否已存在,以下用法是相同的:
if ($session->has('language')) ...
if (isset($session['language'])) ...
if (isset($_SESSION['language'])) ...
// 遍歷所有session變量,以下用法是相同的:
foreach ($session as $name => $value) ...
foreach ($_SESSION as $name => $value) ...
一次性session(Flash 數據 )
$session = Yii::$app->session;
// 請求 #1
// 設置一個名爲"postDeleted" flash 信息
$session->setFlash('postDeleted', 'You have successfully deleted your post.');
// 請求 #2
// 顯示名爲"postDeleted" flash 信息
echo $session->getFlash('postDeleted');
// 請求 #3
// $result 爲 false,因爲flash信息已被自動刪除
$result = $session->hasFlash('postDeleted');
$session = Yii::$app->session;
// 請求 #1
// 在名稱爲"alerts"的flash信息增加數據
$session->addFlash('alerts', 'You have successfully deleted your post.');
$session->addFlash('alerts', 'You have successfully added a new friend.');
$session->addFlash('alerts', 'You are promoted.');
// 請求 #2
// $alerts 爲名爲'alerts'的flash信息,爲數組格式
$alerts = $session->getFlash('alerts');
cookie
讀取 Cookies
當前請求的cookie信息可通過如下代碼獲取:
// 從 "request" 組件中獲取 cookie 集合(yii\web\CookieCollection)
$cookies = Yii::$app->request->cookies;
// 獲取名爲 "language" cookie 的值,如果不存在,返回默認值 "en"
$language = $cookies->getValue('language', 'en');
// 另一種方式獲取名爲 "language" cookie 的值
if (($cookie = $cookies->get('language')) !== null) {
$language = $cookie->value;
}
// 可將 $cookies 當作數組使用
if (isset($cookies['language'])) {
$language = $cookies['language']->value;
}
// 判斷是否存在名爲"language" 的 cookie
if ($cookies->has('language')) ...
if (isset($cookies['language'])) ...
發送 Cookies
可使用如下代碼發送 cookie 到終端用戶:
// 從 "response" 組件中獲取 cookie 集合(yii\web\CookieCollection)
$cookies = Yii::$app->response->cookies;
// 在要發送的響應中添加一個新的 cookie
$cookies->add(new \yii\web\Cookie([
'name' => 'language',
'value' => 'zh-CN',
]));
// 刪除一個 cookie
$cookies->remove('language');
// 等同於以下刪除代碼
unset($cookies['language']);
數據庫操作
數據庫訪問 :http://www.yiichina.com/doc/guide/2.0/db-dao
查詢生成器 :http://www.yiichina.com/doc/guide/2.0/db-query-builder
活動記錄(數據庫操作) :http://www.yiichina.com/doc/guide/2.0/db-active-record
時間控件使用
composer require kartik-v/yii2-widget-datepicker "@dev"//安裝
//日期類應用
use kartik\date\DatePicker;
<?php echo DatePicker::widget([
'name' => 'Article[created_at]',
'options' => ['placeholder' => '...'],
//value值更新的時候需要加上
'value' => date("Y-m-d",time()),
'pluginOptions' => [
'autoclose' => true,
'format' => 'yyyy-mm-dd',
'todayHighlight' => true,
]
]); ?>
下拉控件使用
composer require kartik-v/yii2-widget-select2 "@dev"
<?php $data = [2 => 'widget', 3 => 'dropDownList', 4 => 'yii2'];
echo $form->field($model, 'title')->widget(Select2::classname(), [
'data' => $data,
'options' => ['placeholder' => '請選擇 ...'],
]);?>
//模型要添加規則
打印sql語句
$commandQuery = clone $query;
echo $commandQuery->createCommand()->getRawSql();
詳見文檔https://www.yiichina.com/