Как использовать контроллер Yii, расположенный в папке, а не по умолчанию `protected / controller`?

#controller #yii #file-location

#контроллер #yii #расположение файла

Вопрос:

В Yii, при доступе к <app-host>/index.php?r=<mycontroller>/<myaction> , фреймворк начнет запускать код в protected/controller/<MyController>Controller.php

Я хочу, чтобы этот код находился в другой папке, говорит protected/anotherFolder , в то время как другие контроллеры остаются как есть. Как это сделать?

С уважением

Комментарии:

1. почему вам нужно изменить расположение папки контроллеров из встроенной в Yii?

2. Как указал Кор, я хотел бы сгруппировать логику в свою собственную папку. «Логика» включает контроллер / представление / модель. Модуль отвечает моим потребностям.

Ответ №1:

Откройте <app-host>/index.php , отредактируйте, чтобы

 //...
require_once($yii);
$app = Yii::createWebApplication($config);
$app->setControllerPath('protected/anotherFolder');
$app->run();
 

Комментарии:

1. Спасибо, Элван. Но это изменит все контроллеры. Мне это нужно только для некоторых из них

Ответ №2:

Благодаря mdomba на форуме yii в этом сообщении я нашел ответ, используя CWebApplication::controllerMap — в состоянии загрузки приложения, которое мы вызываем

 Yii::app()->controllerMap['yourControllerName']='path.alias.to.your.controller.file.without.dotPHP';
 

Вы можете использовать controllerMap — http://www.yiiframew…ollerMap-detail

Ответ №3:

Если я вас понял, вы хотите разделить веб-логику на разные «папки» или (более простым способом) модули. Например, перенести все административные функции в другое место и получить доступ к этому, например, используя r = admin / users

Если у вас активирован менеджер gii, перейдите в /index.php?r=gii и создайте модуль. Вот и все. Затем вы можете создавать контроллеры внутри protected/modules/ <module-name> / controllers/ и вызывать их по этому пути. Конечно, представления также хранятся внутри этого

Комментарии:

1. Ты меня хорошо понял. Хотя применение a module сильно изменит структуру моего кода

Ответ №4:

Вы можете добавить в конфигурационный файл

 'controllerPath' => 'your_new_controller_path',
 

То же самое с путем просмотра

 'viewPath' => 'path_to_template_folder',