Pergunta

Criei 2 controladores no meu aplicativo YII: FirstController.php e SecondController.php no caminho do controlador padrão.

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();
  }
}

Quando tento executar exampleFunc() No segundo concorrente, yii joga o erro:

YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory

Chamando FirstController::returnFunc() Da mesma forma, não funcione.

Eu sou novato na estrutura OOP e YII. Qual é o problema?

Foi útil?

Solução

Eu resolvi esse problema. O Autoloader não carrega controladores.

Estava dentro config/main.php:

'import' => array(
    'application.models.*',
    'application.components.*',
),

Tudo funciona com isso:

'import' => array(
    'application.models.*',
    'application.components.*',
    'application.controllers.*',
),

Outras dicas

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

Quando você cria um projeto YII, cada um dos seus controladores estende a classe do controlador, e essa classe estende o CController de classe YII incorporado.

Isso é bom porque o controlador é uma classe dentro do seu aplicativo (ele pode ser encontrado na pasta Componentes).

Se você deseja que um método seja acessível pelos dois controladores, coloque esse método na classe do controlador e, como os dois o estendem. Ambos terão acesso. Apenas certifique -se de declará -lo público ou protegido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top