Download the PHP package mobileka/scope-applicator-yii2 without Composer
On this page you can find all versions of the php package mobileka/scope-applicator-yii2. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package scope-applicator-yii2
ScopeApplicator brings an elegant way of sorting and filtering data to your Yii2 projects.
- Overview
- Requirements
- Installation
- Usage
- Contributing
- License
Overview
ScopeApplicator is an easy and logical way to achieve something like this:
/posts – returns a list of all posts
/posts?recent – returns only recent posts
/posts?author_id=5 – returns posts belonging to an author with an id=5
/posts?author_id=5&order_by_title=desc&status=active – returns only active posts belonging to an author with an id=5 and sorts them by a title in a descending order
Requirements
– PHP 5.4 or newer
– Yii 2.0.x
Installation
composer require mobileka/scope-applicator-yii2 1.0.*
Usage
Let's learn by example. First of all, we'll implement an author_id filter for post table.
These are steps required to achieve this:
- Create a
PostQueryclass which extendsMobileka\ScopeApplicator\Yii2\ActiveQueryand define auserIdmethod - Create a
Postmodel which extendsMobileka\ScopeApplicator\Yii2\Modeland make it use thePostQueryinstead of a regularActiveQuery - Create a basic
PostControllerwhich outputs a list of posts when/postsroute is hit - Tell ScopeApplicator that
userIdscope is available and give it an alias - Visit
/posts?author_id=1and enjoy the result
Ok, let's cover these step by step.
— Create a PostQuery class in app/models/queries directory with the following content:
I'll refer the userId() method as a userId scope in the future.
Make sure that this class extends Mobileka\ScopeApplicator\Yii2\ActiveQuery.
– Create a Post model and override the find method like follows:
This makes sure that our userId scope will be available to the Post model.
– Next, create a PostController:
In this case I extend the yii\rest\Controller and make sure that its output format is set to JSON.
– Now let's modify this controller to make it use ScopeApplicator:
Note that I added a new protected property which describes available scopes. Right now we have only userId.
Also note that I have replaced Post::find() with Post::applyScopes($this->scopes).
If you have done all the above steps, you should be able to populate your post table and try to filter data like follows:
/posts?userId=x.
But we wanted it to be author_id instead of userId, so we have to configure our scope and add an alias:
— That's it! Now you can visit /posts?author_id=x and check the result.
alias is only one of the many available scope configuration options. These are described in ScopeApplicator's documentation.
Contributing
If you have noticed a bug or have suggestions, you can always create an issue or a pull request (use PSR-2). We will discuss the problem or a suggestion and plan the implementation together.
License
ScopeApplicator is an open-source software and licensed under the MIT License.