vasadibt/yii2-action-resolver

Yii Framework 2.0 的扩展,可以扩展控制器,并可以简单地使用操作解析器。

安装: 6

依赖者: 0

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 0

开放性问题: 0

类型:yii2-extension

1.0.0 2023-04-19 13:47 UTC

This package is auto-updated.

Last update: 2024-09-19 16:47:14 UTC


README

使用自定义解析类扩展 Yii2 控制器动作

安装

该软件包可在 Packagist 上找到,您可以使用 Composer 安装它。

composer require vasadibt/yii2-action-resolver "^1.0"

或者将其添加到您的 composer.json 文件的 require 部分。

"vasadibt/yii2-action-resolver": "^1.0"

依赖关系

用法

您需要将 ActionResolveTrait 特性添加到您的控制器中。这将扩展您的 bindInjectedParams 方法并触发新事件。之后,您可以轻松使用该行为。

use vasadibt\actionresolver\ActionResolveTrait;
use vasadibt\actionresolver\ResolvableActionBehavior;

class CashregisterApiController extends \yii\web\Controller
{
    use ActionResolveTrait;
    
    public function behaviors()
    {
        return [
            'resolver' => [
                'class' => ResolvableActionBehavior::class,
                'resolvers' => [
                    // Define a new resolvable
                    [
                        'resolvable' => User::class, // User class need to implement `\vasadibt\actionresolver\ResolvableInterface`
                        // Optional you can filter the fiering action
                        // 'actions' => ['*'],
                        // 'actions' => ['view', 'update', 'delete'],
                    ],
                    
                    // or a simple way
                    User::class,
                    
                    // or you can use callable resolving
                    [
                        'resolvable' => Post::class,
                        'actions' => ['update'],
                        'callable' => function(Request $request, Action $action){
                            $post = static::findOne($request->post('id'));
                            if($post === null){
                                throw new NotFoundHttpException(Yii::t('yii', 'Page not found.'));
                            }
                            if (!Yii::$app->user->can('updatePost', ['post' => $post])) {
                                throw new ForbiddenHttpException(Yii::t('yii', 'You are not allowed to perform this action.'));
                            }
                            return $post;
                        },
                    ],
                ],
            ],
        ];
    }
    
    public function actionView(User $user)
    {
        return $this->render('view', ['user' => $user]);
    }
    
    public function actionUpdate(Request $request, Post $post)
    {
        if($post->load($request->post())){
            $post->save();
            return $this->redirect(['index']);
        }
        return $this->render('update', ['model' => $post]);
    }
    
    public function actionDelete(Post $post)
    {
        $post->delete();
        return $this->redirect(['index']);
       
    }
}
use vasadibt\actionresolver\ResolvableInterface;

class User implements ResolvableInterface
{
    public function resolve($request, $action)
    {
        if($model = static::findOne($request->post('id'))){
            return $model;
        }
        throw new NotFoundHttpException(Yii::t('yii', 'Page not found.'));
    }
}