yii 學習筆記(入門)

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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章