Страница 1 из 1

Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2014.12.01, 12:04
ande
В интернете много информации по этому поводу но нету полной со всеми действиями везде советуют одно и тоже достаточно в конфиге добавить или поменять defaultRoute но этого мало поэтому опишу подробно все необходимые действия для полного переименовывания контроллера.

Чтобы переименовать стандартный контроллер SiteController в любой другой нужно сделать следующее:
(привожу на примере чистой advanced версии и переименовывание в MainController в фронте)

Добавляем или меняем строчку defaultRoute
И меняем путь до экшена ошибок (если он у вас уже не перенаправлен на другой какой нибудь контроллер

Код: Выделить всё

//frontend/config/main.php
return [
...
'defaultRoute' => 'main'
...
'errorHandler' => [
      'errorAction' => 'main/error',
],
]

переименовываем frontend/controllers/SiteController.php в frontend/controllers/MainController.php
и в нем меняем имя класса class SiteController extends Controller разумеется на class MainController extends Controller

переименовываем папку frontend/views/site на frontend/views/main

переделываем линки в файлах frontend/views/layouts/main.php и login.php с site/action на main/action
(разумеется у вас их может быть больше)

если у вас только созданая версия yii2 то это скорее всего все действия иначе разумеется у вас может быть намного больше линков или же что то уже перенастроено.

Re: Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2014.12.01, 14:09
ande
Ещё одна проблема заключается в каптче которая ни при каких обстоятельствах не хочет менять captchaAction по умолчанию есть два багрепорта закртых но без внятного ответа
https://github.com/yiisoft/yii2/issues/693
https://github.com/yiisoft/yii2/issues/1889

в них предлагается два варианта первый это указать в модели captchaAction и перероутить её привожу код из баг-репорта
(кстати в принципе ей не нужен перероут это уж слишком сильный костыль)
I add captchaAction to frontend\modules\frontend\models\ContactForm.php:

['verifyCode', 'captcha', 'captchaAction' => 'frontend/site/captcha'],

and add route rule to frontend\config\params.php to fix image display:

'site/captcha' => 'frontend/site/captcha',
и второй переназначать её при каждом вызове функции
Setup "Captcha::$captchaAction"

echo $form->field($model, 'verifyCode')->widget(Captcha::className(), array(
'captchaAction' => 'mycontroller/mycaptchaaction',
'options' => array('class' => 'input-medium'),
));
как третий вариант из головы создать SiteController и востановить функционал только для каптчи

Код: Выделить всё

<?php

namespace frontend\controllers;

use Yii;

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

}
Может кто то и подскажет решение

Re: Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2014.12.01, 19:30
BrusSENS
1) Не понял, если честно, зачем менять название SiteController.
2) Что именно не понятно вам?

Re: Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2014.12.01, 20:05
zelenin
ande писал(а):В интернете много информации по этому поводу но нету полной со всеми действиями везде советуют одно и тоже достаточно в конфиге добавить или поменять defaultRoute но этого мало поэтому опишу подробно все необходимые действия для полного переименовывания контроллера.
я вас умоляю.

Re: Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2014.12.01, 20:05
zelenin
ande писал(а):Ещё одна проблема заключается в каптче которая ни при каких обстоятельствах не хочет менять captchaAction по умолчанию есть два багрепорта закртых но без внятного ответа
https://github.com/yiisoft/yii2/issues/693
https://github.com/yiisoft/yii2/issues/1889
Может кто то и подскажет решение
вижу четкие ответы. Достаточно прописать роут до экшна.

Re: Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2014.12.12, 10:19
ande
BrusSENS писал(а):1) Не понял, если честно, зачем менять название SiteController.
2) Что именно не понятно вам?
Менять по просьбе заказчика чтобы основные экшены был как main/login и тпд.
Да можно просто перенести экшены но зачем оставлять контроллер почти пустой?

Re: Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2014.12.12, 10:20
ande
zelenin писал(а):
ande писал(а):Ещё одна проблема заключается в каптче которая ни при каких обстоятельствах не хочет менять captchaAction по умолчанию есть два багрепорта закртых но без внятного ответа
https://github.com/yiisoft/yii2/issues/693
https://github.com/yiisoft/yii2/issues/1889
Может кто то и подскажет решение
вижу четкие ответы. Достаточно прописать роут до экшна.
я не считаю что роут до экшена верное решение это дополнительное (отдельное) правило для роутинга

Re: Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2014.12.12, 10:22
zelenin
ande писал(а):
zelenin писал(а):
ande писал(а):Ещё одна проблема заключается в каптче которая ни при каких обстоятельствах не хочет менять captchaAction по умолчанию есть два багрепорта закртых но без внятного ответа
https://github.com/yiisoft/yii2/issues/693
https://github.com/yiisoft/yii2/issues/1889
Может кто то и подскажет решение
вижу четкие ответы. Достаточно прописать роут до экшна.
я не считаю что роут до экшена верное решение это дополнительное (отдельное) правило для роутинга
причем тут правило для роутинга? разберитесь как работает капча

Re: Переименовывание стандартного контроллера / rename SiteController

Добавлено: 2015.01.15, 16:33
VaNnOrus
ТС, про пунктуацию что-нибудь слышали?

Мне вот интересно: чем хуже строка в правилах роутинга, чем лишний контроллер?
И зачем его вообще переименовывать, когда можно использовать по назначению как раз правила роутинга? Я, например, вообще убрал "site" из урла, добавив одну строку в роутинг и никаких проблем не испытываю.