Страница 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
вижу четкие ответы. Достаточно прописать роут до экшна.
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 писал(а):
вижу четкие ответы. Достаточно прописать роут до экшна.
я не считаю что роут до экшена верное решение это дополнительное (отдельное) правило для роутинга
Re: Переименовывание стандартного контроллера / rename SiteController
Добавлено: 2014.12.12, 10:22
zelenin
ande писал(а):zelenin писал(а):
вижу четкие ответы. Достаточно прописать роут до экшна.
я не считаю что роут до экшена верное решение это дополнительное (отдельное) правило для роутинга
причем тут правило для роутинга? разберитесь как работает капча
Re: Переименовывание стандартного контроллера / rename SiteController
Добавлено: 2015.01.15, 16:33
VaNnOrus
ТС, про пунктуацию что-нибудь слышали?
Мне вот интересно: чем хуже строка в правилах роутинга, чем лишний контроллер?
И зачем его вообще переименовывать, когда можно использовать по назначению как раз правила роутинга? Я, например, вообще убрал "site" из урла, добавив одну строку в роутинг и никаких проблем не испытываю.