14

For buiding restful API using Yii2, does anyone has good example on how to add a new action in a controller? Thanks.

2 Answers 2

28

I am not sure if you are asking for extra actions beside CRUD or just for CRUD, so I write in details for both cases.

Firstly, the framework includes \yii\rest\ActiveController that provides typical restful API operation and URL management.

Basically, the controller predefines the CRUD operations as followed:

POST /resource -> actionCreate -> Create the resource

GET /resource/{id} -> actionView -> Read the resource

PUT, PATCH /resource/{id} -> actionUpdate -> Update the resource

DELETE /resource/{id} -> actionDelete -> Delete the resource

GET /resource -> actionIndex -> List all the resources

The URL routing rules and actions definition can be found in \yii\rest\ActiveController, \yii\rest\UrlRule and the respective \yii\rest\*Action.

Secondly, if you want to add extra restful API in the controller, you can simply write your extra actionXxxxx(), and in configuration, add the following url rules under urlManager:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        [
            'class' => 'yii\rest\UrlRule',
            'controller' => ['resource'],
            'pluralize' => false,
            'extraPatterns' => [
                'POST {id}/your_preferred_url' => 'xxxxx', // 'xxxxx' refers to 'actionXxxxx'
            ],
        ],
    ],
],

Effectively, this will generate a new routing rule, requesting POST /resource/{id}/your_preferred_url will invoke actionXxxxx of your ResourceController.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, works like a charm. Little note though: this extra pattern will be for every controller specified, but you can add another rule with other controllers.
3

Here is a good example using Yii 2 advanced application template

https://github.com/deerawan/yii2-advanced-api

more detail of this project http://budiirawan.com/setup-restful-api-yii2/

also you can use Yii 2 basic application template if you want. what you have to do is follow this kind of folder structure (v1 for version) (Yii doc -A module may consist of sub-modules.)(GiovanniDerks - backend sub-modules)

-modules
--api
---v1
----controllers
----models

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.