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/

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