Функция вызова в другом контроллере в Yii
Вопрос
Я создал 2 контроллера в моем приложении Yii: firstcontroller.php и secondcontroller.php в пути контроллера по умолчанию.
Firstcontroller.php:
<?php
class FirstController extends Controller {
public static function returnFunc() { return 'OK'; }
}
SecondController.php:
<?php
class SecondController extends Controller {
public function exampleFunc() {
$var = First::returnFunc();
}
}
Когда я пытаюсь выполнить exampleFunc()
Во второмконтероллере Yii бросить ошибку:
YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory
Призыв FirstController::returnFunc()
Точно так же не работай.
Я Newbee в OOP и Yii Framework. В чем проблема?
Решение
Я решил эту проблему. Автозагрузчик не загружает контроллеры.
Это было в config/main.php
:
'import' => array(
'application.models.*',
'application.components.*',
),
Все работают с этим:
'import' => array(
'application.models.*',
'application.components.*',
'application.controllers.*',
),
Другие советы
class ServiceController extends Controller
{
public function actionIndex()
{
Yii::import('application.controllers.back.ConsolidateController'); // ConsolidateController is another controller in back controller folder
echo ConsolidateController::test(); // test is action in ConsolidateController
class ServiceController extends Controller
{
public function actionIndex()
{
Yii::import('application.controllers.back.CservicesController');
$obj =new CservicesController(); // preparing object
echo $obj->test(); exit; // calling method of CservicesController
Когда вы создаете проект Yii, каждый из ваших контроллеров расширяет класс контроллера, и этот класс расширяет встроенный CController класса Yii.
Это приятно, потому что контроллер - это класс в вашем приложении (его можно найти в папке компонентов).
Если вы хотите, чтобы способ быть доступным по обоимным контроллерам, поместите этот метод в классе контроллера, и поскольку они оба продлится. У них оба будут доступ. Просто обязательно заявляйте, что это публично, либо защищено.