Installazione Zend Framework.

Salve a tutti,

  come alcuni di voi, sto tentando d'installare la nuova framework della Zend.  Già ho avuto dei consigli e documentazione su come "iniziare".

come già ho postato in altra sede(andando off-topic e chiedo scusa se l'ho introdotta su un tema non idoneo) riporto la mia situazione e l'errore.

ho creato nella rootDirectory(C:\www) del web server(apache 2.0.59) la struttura  simile a come indicato dal tutorial http://framework.zend.com/manual/en/zend.controller.html ovvero:

[table][tr][td]c:/www/zf_tutorial/test

                             /public

                             /library

                             /incubator

                             /documentation

                             /demos

                             /application

                                    /controllers

                                    /models

                                    /views

                                            /filters

                                            /helpers

                                            /scripts

[/td][/tr][/table]

ed ho creato la pagina c:\index.php così:

<?php
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('C:/www/zf_tutorial/application/controllers');

   phpinfo();
?>

dove ho interpretato /path/to/app/controllers come l'indirizzo assoluto sulla mia macchina ovvero C:/www/zf_tutorial/application/controllers (per rispondere a LonelyWolf)

però mi da il seguente errore:

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\www\zf_tutorial\library\Zend\Controller\Dispatcher\Standard.php:189 Stack trace: #0 C:\www\zf_tutorial\library\Zend\Controller\Front.php(889): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\www\zf_tutorial\library\Zend\Controller\Front.php(229): Zend_Controller_Front->dispatch() #2 C:\www\index.php(3): Zend_Controller_Front::run('C:/www/zf_tutor...') #3 {main} thrown in C:\www\zf_tutorial\library\Zend\Controller\Dispatcher\Standard.php on line 189

Da cosa può dipendere?

Andrea

inviato 9 anni fa
cybaSsh
modificato 9 anni fa
X 0 X

ma non hai creato neanche un controller?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

hem... no. cioè ho fatto una pagina indexcontroller.php vuota, che immagino non serva a risolvere nulla.

o meglio, io sto procedendo come uno che non ha mai usato framework. Sto approcciando col metodo di implementazione MVC da poco.

Sto seguendo passo passo le varie guide on line, ma non ho individuato una parte ove mi spiega i requisiti dell'utilizzo. non utilizzo lo SNV,vorrei fare tutto a mano e capire.

nel frattempo sto redagendo una piccola guida(o qualcosa che possa aiutare qualcun'altro a scrivere una guida migliore) nata anche dai problemi che logicamente ho trovato e risolto.

Inoltre le domande aggiunte che mi nascono "spontanee" sono :

1- cos'è e a cosa serve il controller? a parole ho capito, ma in pratica come e a cosa si lega?

2- quanto e cosa influenzano i file .htaccess? (mi sembra che determinano il tipo d'accesso alla directory virtuale del Web server no)?

Ovviamente non mi aspetto una risposta esaustiva, perchè dovrò sforzarmi di capire anch'io... chiedo semplicemente asilo.

Andrea

p.s.

(facoltativo)

3-- come faccio a chiamare amore la mia compagna anche sapendo che fra 40 anni la chiamerò amore perchè mi sono scordato il suo nome?

risposto 9 anni fa
cybaSsh
X 0 X

Il controller è una classe che funge da cervello del caso d'uso, quindi si occupa di capire cosa vuole l'utente e di dargli quello che ha chiesto. Nello ZF c'è un front controller che dall'URL richiesto dall'utente capisce quale controller richiamare e quale azione particolare fargli compiere. Poi sta al controller eseguire realmente l'operazione richiesta, interagendo con i dati (il model) ed i template HTML (le view).

Con il file .htaccess si riesce a dirottare tutte le richieste (tutti gli URL) inviati ad un server ad un unico URL, quello  che contiene il front controller, generamente il file index.php

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

... ha emesso il primo script...

 :2funny:

risposto 9 anni fa
cybaSsh
X 0 X

Rispolvero questo topic...

Ho un errore analogo

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\Programmi\Zend\Core\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php:194 Stack trace: #0 C:\Programmi\Zend\Core\ZendFramework\library\Zend\Controller\Front.php(920): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\Programmi\Zend\Core\ZendFramework\library\Zend\Controller\Front.php(224): Zend_Controller_Front->dispatch() #2 C:\Programmi\Zend\Apache2\htdocs\oop\index.php(30): Zend_Controller_Front::run('\controllers\') #3 {main} thrown in C:\Programmi\Zend\Core\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php on line 194

Sto impazzendo ormai da giorni...

la mia index.php è così composta

<?php

// includo la cartella del framework e quella dei models   
set_include_path(get_include_path().PATH_SEPARATOR.'C:\Programmi\Zend\Core\ZendFramework\library\\'.PATH_SEPARATOR.'.\models');  
 
require_once('Zend\Loader.php');   
  
Zend_Loader::registerAutoload();   
  
date_default_timezone_set('Europe/Rome');   
  
try {   
    $db = Zend_Db::factory('Pdo_Mysql', array(   
    'host'     => 'localhost',   
    'username' => 'root',   
    'password' => 'pippo',   
    'dbname'   => 'test'  
    ));   
  
    $db->getConnection();   
} catch (Zend_Db_Adapter_Exception $e) {   
    die("Zend_Db_Adapter_Exception: ".$e->getMessage());   
} catch (Zend_Exception $e) {   
    die("Zend_Exception".$e->getMessage());   
}   
  
Zend_Registry::set('db', $db);   
  
define('BASE_URL', str_replace('index.php','',$_SERVER['PHP_SELF']));   
Zend_Controller_Front::run('\\controllers\\');   

?>

Grazie in anticipo

risposto 8 anni fa
Kaesar83
X 0 X

dunque:

parti con il sistemare la path dei controller nel punto in cui avvii il fronto controller

Zend_Controller_Front::run('/controllers/');

sistemato quello, crea un controller chiamato errorController, questo riceverà gli errori dell'applicazione e li gestirà nel caso si verifichino, se vuoi visualizzarli anzichè gestirli (ad esempio in fase di sviluppo) devi fare così:

nel file di bootstrap (index.php)

invece di :

Zend_Controller_Front::run('/controllers/');

metti questo:

$front = Zend_Controller_Front::getInstance();
$front->throwExceptions(true)
          ->setControllerDirectory('/controllers/')
          ->dispatch();

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

Grazie trashofmaster, ma non problema di slash, nè di ErrorController.

Considera che il mio ErrorController.php possiede questo

<?php   
class ErrorController extends Zend_Controller_Action   
{   
    public function errorAction()   
    {   
        $this->view->titoloPagina = 'Pagina non trovata';   
    }   
}   
?>

e si trova nella cartella /controllers/

Il risultato cmq non cambia...stesso errore!

Voglio cercare di sviluppare con questo framework, ma porca pupazza ho sempre problemi.

Spero riuscirai a darmi una mano!

Grazie!

risposto 8 anni fa
Kaesar83
X 0 X

Hai sistemato gli slash nel path?

Potrebbero essere quelli la causa del problema.

Ti consiglio comunque di verificare che tutti i file siano inclusi.

Se non hai gli errori abilitati nel php.ini ti consiglio di farlo, ci son cascato anche io.

abilita show errors nel php.ini e riprova

poi ci fai sapere.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Si sono attivati

risposto 8 anni fa
Kaesar83
X 0 X

Ecco, finalmente ho risolto!

dovevo usare questo include_path()

set_include_path(get_include_path().PATH_SEPARATOR.'C:\Programmi\Zend\Apache2\htdocs\oop'.PATH_SEPARATOR.'.\models'); 

Sbagliavo quello...grazie cmq per l'aiuto...oggi mi son messo seriamente su e ho iniziato a capire come funziona la cosa  ;D

risposto 8 anni fa
Kaesar83
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda