vasadibt / yii2-action-resolver
Yii Framework 2.0 的扩展,可以扩展控制器,并可以简单地使用操作解析器。
1.0.0
2023-04-19 13:47 UTC
Requires
- php: >=7.4.0
- yiisoft/yii2: ~2.0
README
使用自定义解析类扩展 Yii2 控制器动作
安装
该软件包可在 Packagist 上找到,您可以使用 Composer 安装它。
composer require vasadibt/yii2-action-resolver "^1.0"
或者将其添加到您的 composer.json
文件的 require 部分。
"vasadibt/yii2-action-resolver": "^1.0"
依赖关系
- PHP 7.4+
- yiisoft/yii2
用法
您需要将 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.')); } }