Отдельные действия контроллеров в фреймворке Yii2 не создаются в теле самого контроллера и не имеют стандартного названия типа actionIndex(). Они указываются в карте действий контроллера, в методе actions(). Сам же функционал такие действия хранят в отдельных классах.

По применению я их разделяю на:
  • Функциональные. Главное их назначение - обработать какие-то данные, а дальше могут на этом остановиться (при использовании PJAX) или осуществить перенаправление, могут вывести страницу .
  • Вывод статической страницы. Назначение - вывод запрашиваемой страницы на экран без необходимости создания отдельного действия в контроллере, которое выводит страницу методом render().

ФУНКЦИОНАЛЬНЫЕ

Начну сразу с примера. Создаем класс действия в common\components\HelloWorldAction.php
<?php
namespace common\components;
use yii\base\Action;
class HelloWorldAction extends Action
{
    public function run()
    {
        return "Hello World!!!";
    }
}
Для создания отдельного действия, вы должны наследоваться от класса [[yii\base\Action]] или его потомков, и реализовать метод run() с областью видимости public.

Теперь подключим действие, например в frontend\controllers\SiteController.php
public function actions()
{
    return [
            'hi' => [
                'class' => 'app\components\HelloWorldAction',
            ],
    ];
}
Название нашего действия - 'hi'. Чтобы вызвать его, нужно набрать в адресной строке:
http://site.com/site/hi

В данном примере возвращаемое методом run() значение будет выведено пользователю в виде строки. На практике же, в run() могут вызываться другие методы, можно получать параметры из форм, например:
Yii::$app->request->get()
    
делать переадресацию:
return Yii::$app->response->redirect('http://klisl.com/service.html');
        
и тд.

То есть таким образом можно вынести функционал из методов контроллера в отдельный класс. Похожее значение имеют подключаемые пользовательские классы, например с помощью поведений. Но они не являются действиями, и не получится передать в них напрямую, например, параметры при отправке пользователем формы.



Вывод статической страницы.

Удобно использовать когда не нужно формировать и передавать данные в файл вид. При этом не понадобится создавать несколько однотипный действий контроллера такого плана:
public function actionContact()
{
    return $this->render('signup');
}

Для этого используется встроенный класс \yii\web\ViewAction, который предназначен для вывода статических страниц.
Подключим его в frontend\controllers\SiteController.php
public function actions()
    {
        return [
            'page' => [
                'class' => 'yii\web\ViewAction',
            ],
        ];
    }
Файл представление в данном случае размещается в: frontend\views\site\pages\contact.php
где pages – название папки по-умолчанию. Название можно поменять если добавить в массив следующим элементом после указания класса:
'viewPrefix' => 'tables' //название папки c видами 
папку можно и удалить
'viewPrefix' => ''       
тогда файл вид будет с другими файлами в frontend\views\site\contact.php

Ссылка для вывода страницы на экран будет такого плана:
http://site.com/site/page?view=contact

Согласно ссылки – нужно поместить файл вид contact.php в папку frontend\views\site\pages. В названии файла не должно быть нижнего подчеркивания.

Данный способ работает только для передачи названия страницы в качестве GET параметра. Но можно сделать, чтобы ссылка выглядела привычным образом, в данном случае так:
http://site.com/page/contact

Для этого в frontend\config\main.php
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
            //Преобразовывает в GET типа site/page?view=...
            'page/<view:[a-zA-Z0-9-]+>' => 'site/page',
            …
    ]
],
данное правило преобразовывает данные в GET параметры для использования в классе ViewAction.