[Risolto] Problema Con Ereditarietà Dei Controller Dentro Ad Un Model


(Mirkotebaldi) #1

ho un modulo whmcs che contiene, a parte il DefaultController, altri due controller.

Ora ho pensato di creare un WhmcsController, dove inserire alcuni filtri e la index di default.

Ho modificato gli altri due controller in modo che estendano WhmcsController invece di Controller

Il problema è che accedendo ad uno qualsiasi di questi moduli ottengo




include(WhmcsController.php): failed to open stream: No such file or directory



Il nome del file è corretto, il nome della classe è corretto. Il file è leggibile ed è davvero presente nella cartella whmcs/controllers.

Costa sto sbagliando !?


(Sensorario) #2

Quali sono i moduli di cui parli?


(Mirkotebaldi) #3

Mi spiego meglio, nel frattempo colgo l’occasione per segnalare che ho risolto. La soluzione è fra poche righe.

Allora il modulo è questo


\protected\modules\whmcs\

li dentro c’è ovviamente la cartella controller

la cartella contiene




DefaultController

ClientController

CreditController

A questo punto, dato che client e credit hanno cose in comune, ho creato, sempre dentro a whmcs\controller, il file


WhmcsController

quindi ho modificato ClientController e CreditController perchè estendano WhmcsController (che a sua volta estende Controller).

Quando però eseguo, per esempio, l’azione


index.php?r=whmcs/client/index 

ottengo l’errore


include(WhmcsController.php): failed to open stream: No such file or directory

Un collega geniale mi ha fatto notale che Controller dovrebbe esssere un componente, percui ho creto


whmc/components/

e ci ho spostato dentro WhmcsController

A questo punto ClientController e CreditController sono stati liberi di estendere WhmcsController, senza alcun import, ne alcun’altra configurazione aggiuntiva


(Sensorario) #4

Come può un controller essere un componente?


(Mirkotebaldi) #5

cartella protected/component/ c’è il Controller da cui ereditano tutti gli altri, giusto?

così avviene anche per protected/modules/component

tutto qui


(Sensorario) #6

Io chiamo controller solo quei files che si trovano dentro alla cartella protected/controllers. Quindi posso chiamare controller base, oppure componente, quel file che si chiama Controller.php e che si trova dentro alla cartella protected/components. Anzi, a dire il vero avrebbe più senso che quest’ultimo fosse una classe astratta. Mi piace essere pignolo su queste cose. Ma al di la della mia pignoleria (eccessiva e quasi fastidiosa alle volte XD) ho capito il problema. Anche se non mi è chiaro come mai quel file non fosse caricato di suo.


(Mirkotebaldi) #7

per autocaricarlo, nel file del modulo bisogna impostarlo tra gli auto import (scusami se io invece uso parole tutte tranne che tecniche…)