yii2 SiteController метод actions. Зачем нужен этот метод?

В yii2 в SiteController есть метод actions. Выглядит он так:

public function actions()
{
    return [
        'error' => [
            'class' => 'yii\web\ErrorAction',
        ],
        'captcha' => [
            'class' => 'yii\captcha\CaptchaAction',
            'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
        ],
    ];
}

Не могу понять зачем он нужен? Заодно подскажите, пожалуйста, какие-нибудь хорошие скринкасты, чтобы можно было быстро въехать в yii2.


Ответы (2 шт):

Автор решения: WarLikeLaux

Это Standalone Actions. Почитать что это можно здесь. Также прочитай обязательно про Controller Lifecycle.

У меня есть пример использования таких actions на учебном проекте.

<?php

namespace app\controllers;

class StandaloneController extends \yii\web\Controller
{
    // public $defaultAction = 'hello-world';

    public function init()
    {
        parent::init();
        $this->defaultAction = 'hello-world';
    }

    public function actions()
    {
        return [
            'index' => [
                'class' => 'yii\web\ViewAction',
                'viewPrefix' => '',
                'defaultView' => 'index',
            ],
            'hello-world' => 'app\components\actions\HelloWorldAction',
            'error' => [
                'class' => 'yii\web\ErrorAction',
                'view' => 'error',
            ],
        ];
    }

    public function actionHelloWorld()
    {
        return 'Hello World 2';
    }

    public function actionTest(array $array, $string)
    {
        var_dump($array, $string);
    }

    public function actionForward()
    {
        return $this->redirect('https://google.com');
    }
}

Что почитать по поводу Yii 2: документацию, НО строго на английском. И рекомендую вступить в русский Telegram-канал фреймворка.

→ Ссылка
Автор решения: Турецкий Гамбит

В Yii есть возможность создавать standalone-экшены - это значит что есть класс который является обработчиком того или иного роута. Назначается этот обработчик через метод actions() как раз - где вы указываете в качестве ключа наименование экшена а в качестве значения массив где указываете class который и будет обработчиком этого роута

Например:

// SiteController
public function actions():array 
{
    return [
        'error' => [
           'class' => ErrorAction::class,
        ],
    ];
}

при переходе по урлу /site/error yii будет вызывать класс ErrorAction метод run()

PS: это все равно что вы в контроллере создадите метод actionError() непосредственно в контроллере

→ Ссылка