vasadibt / yii2-action-resolver
Extension for Yii Framework 2.0 what extending the controllers and you can use simply the action resolvers.
Installs: 6
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:yii2-extension
Requires
- php: >=7.4.0
- yiisoft/yii2: ~2.0
README
Extend Yii2 controller actions with custom resolved classes
Installation
Package is available on Packagist, you can install it using Composer.
composer require vasadibt/yii2-action-resolver "^1.0"
or add to the require section of your composer.json
file.
"vasadibt/yii2-action-resolver": "^1.0"
Dependencies
- PHP 7.4+
- yiisoft/yii2
Usage
You need to add ActionResolveTrait
trait to your controller.
THis will be extending your bindInjectedParams
method with a new event trigger.
After that you can use easily the behavior:
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.')); } }