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

Обсуждение документации второй версии фреймворка. Переводы Cookbook и авторские рецепты.
Ответить
ande
Сообщения: 5
Зарегистрирован: 2013.09.05, 12:51

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

Сообщение 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 то это скорее всего все действия иначе разумеется у вас может быть намного больше линков или же что то уже перенастроено.
ande
Сообщения: 5
Зарегистрирован: 2013.09.05, 12:51

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

Сообщение 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,
            ],
        ];
    }

}
Может кто то и подскажет решение
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

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

Сообщение BrusSENS »

1) Не понял, если честно, зачем менять название SiteController.
2) Что именно не понятно вам?
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

ande писал(а):В интернете много информации по этому поводу но нету полной со всеми действиями везде советуют одно и тоже достаточно в конфиге добавить или поменять defaultRoute но этого мало поэтому опишу подробно все необходимые действия для полного переименовывания контроллера.
я вас умоляю.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

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

Сообщение ande »

BrusSENS писал(а):1) Не понял, если честно, зачем менять название SiteController.
2) Что именно не понятно вам?
Менять по просьбе заказчика чтобы основные экшены был как main/login и тпд.
Да можно просто перенести экшены но зачем оставлять контроллер почти пустой?
ande
Сообщения: 5
Зарегистрирован: 2013.09.05, 12:51

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

Сообщение ande »

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

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

Сообщение zelenin »

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

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

Сообщение VaNnOrus »

ТС, про пунктуацию что-нибудь слышали?

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