yii2使用相关记录

#Yii::$app->user 是指yii\web\User这个类

#yii2在命令行下执行
D:
cd D:\wnmp\php5
php D:\wnmp\www\yii2\yii test/test

TestController.php
<?php 
namespace console\controllers;
 
use yii\console\Controller;
 
class TestController extends Controller
{
    public function actionTest()
    {
        echo "test\n";
    }
}
?>

#初始化yii2项目
php D:\wnmp\www\yii2-advanced-2.0.6\advanced\init

#增加gii生成代码时的模版修改

    配置文件main.php中增加如下配置

    'generators' => [
        'model'   => [
            'class'     => 'yii\gii\generators\model\Generator',
            'templates' => ['defaultG' => '@vendor/yiisoft/yii2-gii/generators/model/defaultG']
        ]
    ]

#yii2的Event测试
1. Event的特性是在Componet中加入的。
2. 只要是Component类的子类都具有Event的属性。
3. Event使用的第一步是调用on()函数将事件相关信息写入。
4. Event使用的第二步是用trigger()函数将写入的事件执行。
5. Component的on()函数是将这个Event的相关信息(要触发的事件名称,触发事件时要用到的数据,触发事件时要执行的相关函数)写入到Componet的私有变量$_events数组中。
6. Component的trigger()函数就是调用call_user_fun()执行on()函数中写入的事件相关信息。

    public function actionTestEvent()
    {
        $this->on('Person::EVENT_GREET', '\frontend\controllers\SiteController::person_say_hello', 'Hello World!');
        $this->trigger('Person::EVENT_GREET');
    }
    
    public static function person_say_hello($event)
    {
        echo $event->data;                // 将显示 Hello World!
    }

#有两类特殊的配置项需要注意,就是以 on * 打头的事件和以 as * 打头的行为。Yii对于这两类配置项的处理,是在 yii\base\Component::__set() 中完成的。[1]

#取当前类的类名
    public function formName()
    {
        $reflector = new ReflectionClass($this);

        return $reflector->getShortName();
    }

#rbac
授权数据准备好后,存取检查简单到只需要一个方法调用 yii\rbac\ManagerInterface::checkAccess()。

因为大多数存取检查都是针对当前用户而言,为方便起见, Yii 提供了一个快捷方法 yii\web\User::can(),可以如下例所示来使用:

if (\Yii::$app->user->can('createPost')) {
    // 建贴
}

为了检查某用户是否能更新帖子,我们需要传递一个额外的参数,该参数是 AuthorRule 要用的:

if (\Yii::$app->user->can('updatePost', ['post' => $post])) {
    // 更新帖子
}

为通过检查,Authorrule 规则的 execute() 方法应当返回 true 。该方法从 can() 方法调用接收到 $params 参数, 因此它的值是 ['post' => $post]

#Yii2在命令行下通过gii生成model和crud代码
#生成model
yii gii/model --ns=frontend\models\generate --tableName=test_user --modelClass=GUser --interactive=0 --overwrite=1
#生成model时继承另一个类
yii gii/model --ns=frontend\models\expand --baseClass=frontend\models\generate\GUser --modelClass=User --tableName=test_user --interactive=0 --overwrite=1
#生成curd
yii gii/crud --modelClass=frontend\models\expand\User --controllerClass=frontend\controllers\UserController --viewPath=@frontend/views/user  --enableI18N=1 --interactive=1 --overwrite=1

#在操作model时可用setAttributes()方法代替直接给对像赋值,再对参数做相关排版就可使代码更加清晰
$user_order = new UserOrder();
$user_order->setAttributes([
    "user_id"               => Yii::$app->user->getId(),
    "goods_id"              => $model->goods_id,
    "address_id"            => $model->address_id,
    "status"                => 1
],false);
if($user_order->save()){
    return [
        'code' => 1,
        'error_msg' => '操作成功',
        'order_sn' => $user_order->order_sn,
    ];
} else {
    return [
        'code' => 0,
        'error_msg' => '操作失败',
        'error' => $user_order->getErrors(),
    ];
}

#获取_csrf值
\Yii::$app->getRequest()->getCsrfToken();

#Yii2的count()使用
$user_count = User::find()->count();

#Yii2的where条件的一种使用方法 [1]
$query->andWhere([
    'and',
    [
        '>=',
        'price',
        1
    ],
    [
        '<=',
        'price',
        20
    ],
]);
$query->andWhere([ 'and', [ '>=', 'price', 1 ], ]);

#数据查询和分页
$query = (new \yii\db\Query())
    ->select(['user.id',
     'user_address.address'
    ])
    ->from('user', 'user_address')
    ->join('LEFT JOIN', 'user_address', 'user.id = user_address.user_id')
    ->where(['user.id' => Yii::$app->user->getId()])
    ->andWhere(['>', 'user_address.status', 0]);

$query_count = clone $query;
$pages = new \yii\data\Pagination(['totalCount' => $query_count->count()]);

$models = $query->offset($pages->offset)
            ->limit($pages->limit)
            ->all();

posted on 2016-04-10 07:18  dream_bccb  阅读(372)  评论(0)    收藏  举报