ZF e php-cli

 :bye:

se all'interno di una applicazione mettiamo una o più action che vogliamo far eseguire ad uno scheduler

(crond ad esempio) come si fa con ZF?

se lancio php-cli passadogli  l'url non funziona (e mi stupisco di me che ci ho pure provato)

se lo lancio passandogli la path del file #: php /miaapp/public/index.php

funziona ma esegue solo indexAction del controller di default del modulo di default.

povero illuso ho provato anche #: php /miaapp/public/index.php/miomodulo/miocontroller/miaaction

naturalmente non va

che ne dite, come faccio a fargli eseguire una action a piacere da un controller a piacere di un modulo a piacere?

inviato 6 anni fa
fabio.pellati
X 0 X

Se il tuo controller è una semplice classe, tu questa classe o oggetto lo puoi richiamare come preferisci in un qualsiasi file tipo:

require(percorso/tuo/controller);
// istanzi l'oggetto
$object = new TuoController();
//richiami l'action
$object->tuaaction();

Il file poi lo puoi richiamare dal terminale.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

interessante ipotesi, ma tutta l'inizializzazione di application l'esecuzione dei vari bootstrap (di applicazione e di modulo)  con tutto quello che ne consegue, la fa anche istanzioando direttamente la classe?

per quel poco che ho capito fin'ora questo sarebbe molto stupefacente.

in particolare questi controller istanziano dei model che a loro volta fanno riferimento a connessioni a database definiti in config.ini  e condivisi in zend_registry.

non capisco come ZF possa riuscirci ma ci provo.

risposto 6 anni fa
fabio.pellati
X 0 X

confermo che non funziona.

dice che non può istanziare il controller perchè questo estende Zend_Controller_Action e non trova quest'ultima.

è dovuto al fatto che l'applicazione fa troppe cose per dare funzionalità a MVC e devo trovare il modo di fargliele fare anche con php-cli.

mi chiedo:

 se lancio #: php /miaapp/public/index.php/miomodilo/miocontroller/miaaction

chiaramente non funziona perchè per il filesistem quella scritta ha un significato preciso che non è quello del dispatcher

ma se potessi passare tutto come parametri#: php /miaapp/public/index.php?modulo=miomodilo&controller=miocontroller&action=miaaction

forse funziona. al momento però non mi è chiaro se è possibile lanciare l'applicazione passando direttamente i parametri ne, naturalmente, come.

risposto 6 anni fa
fabio.pellati
X 0 X

a volte le soluzioni sono talmente semplici che neanche ci vengono in mente:

basta fare aprire l'url a fopen o a file_get_contents

$dom = file_get_contents("http://miodominio/modulo/controller/action");
echo $dom;
risposto 6 anni fa
fabio.pellati
X 0 X

Non avevo capito che necessitavi di tutta la funzionalità della tua applicazione, credevo ti servisse solamente l'oggetto del tuo controller.

Bene che hai risolto così. Non capisco perchè fare una cosa del genere quando ci sono degli strumenti appositi per fare cose simili...cioè non vedo perchè richiamare una pagina web per eseguire cronologicamente una chiamata ad essa...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

perchè quello che sto realizzando non è una sito web ma un'applicazione gestionale che usa il browser come interfaccia, ma che ha anche bisogno di eseguire delle operazioni schedulate.

nel caso specifico stavo lavorando a questo:

 un corriere cui vengono affidate delle spedizioni (molte: oltre 100 a settimana) mi manda per email dei file csv con lo stato delle spedizioni, alla notte l'applicazione scarica la posta, apre i file, ne analizza il contenuto, carica tutto su un database che gira sul webserver e ne aggiorna un'altro in rete con gli stati delle consegne ed eventualmente i saldi dei pagamenti. manda qualche e-mail per i casi in cui servono ecc...

l'operazione si può eseguire anche cliccando su un menù ma, essendo di routine, preferisco che sia schedulata e che mi mandi un messaggio solo se qualcosa va storto

quindi tutte le notti alle 03:00 faccio eseguire a crond un'operazione che apre l'URL e scatena l'action che fa tutto; è abbastanza efficiente.

risposto 6 anni fa
fabio.pellati
X 0 X

Ah :)

Buon lavoro allora :)

risposto 6 anni fa
Mario Santagiuliana
modificato 6 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda