Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Zend Framework implementare modulara
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
joe_black



Data înscrierii: 03/Mai/2006
Mesaje: 42

Trimis: Mar Apr 08, 2008 7:27 pm    Titlul subiectului: Zend Framework implementare modulara  

Salut. Incerc sa implementez ZF intr-o aplicatie in care am mai multe module.

In bootstrap (index.php)
am un cod de genu asta :
Cod:
define('DS', DIRECTORY_SEPARATOR);
define('PS', PATH_SEPARATOR);
define('BP', dirname(__FILE__));

include 'Zend/Loader.php';
Zend_Loader::registerAutoload();


Zend_Controller_Front::getInstance()
            ->throwExceptions(true)
            ->setParam('noViewRenderer', true)
            ->addModuleDirectory(BP.DS.'app/')
            ->dispatch();


si in folderul '/app' 2 directoare default si 'amod'

app/
+ default/
+- controllers/
+ amod/
+- controllers/
+-- IndexController.php //indexAction() afiseaza mesaj de default/index/index

Problemea mea :

daca incerc '/amod/ ' arunca exceptia ca nu gaseste controllerul 'amod'

adaug o ruta
Cod:
   $this->addRoute('default',new  Zend_Controller_Router_Route('/:module/:controller/:action/*'), array(
               'controller'=>'index',
               'action'=>'index'));


si acum cand dau /amod/index/index totul e ok
insa cand am /amod/ sau orice altceva decat linia de mai sus imi ruleaza tot /default/index/index


rezultatul scontat e cel descris in:
http://phpeye.com/zf/zend.controller.router.html
sectiunea: 7.5.4. Default routes


Stiti ceva exemple in care est folosit cu succes rutarea asta moduara ?
Sus  
Amenthes



Data înscrierii: 12/Dec/2005
Mesaje: 384

Trimis: Mie Apr 09, 2008 5:35 pm    Titlul subiectului:  

Cum se numeste clasa care se afla in fisierul amod/controllers/IndexController.php ?

Daca se numeste cumva doar IndexController trebuie sa ii pui prefixul modulului. Adica Amod_IndexController
Sus  
joe_black



Data înscrierii: 03/Mai/2006
Mesaje: 42

Trimis: Mie Apr 09, 2008 5:39 pm    Titlul subiectului:  

da. Amod_IndexController se numeste . Nu-mi ruteaza bine. Am reusit cumva impunandu-mi eu rutele. da rutarea asta ar trebui sa mi-o faca by default.

Va trimit sursa daca vreti sa experimentati si voi
Sus  
Amenthes



Data înscrierii: 12/Dec/2005
Mesaje: 384

Trimis: Mie Apr 09, 2008 9:17 pm    Titlul subiectului:  

N-ar fi rau. Fa un zip cu ceea ce e in plus fata de ZF si lasa un link. Nu reusesc din cele spuse mai sus de tine sa vad ce are. Eu unul am reusit sa implementez module de mai multe ori...

Si apropo, ce versiuni de ZF si PHP ai tu?
Sus  
joe_black



Data înscrierii: 03/Mai/2006
Mesaje: 42

Trimis: Joi Apr 10, 2008 1:27 pm    Titlul subiectului:  

Uite ca am gasit posibila problema. Eu extind clasa Zend_Controller_Front. Imi trebuie ca sa customizez functia de "run".

Anyways. Cu Zend_Controller_Front merge. Dupa ce o extind si pun functia My_Controller_Front::getInstance() care e obligatorie.. -singleton- nu mai merge rutarea. Nu inteleg comportamentu asta :)

http://www.upload-drive.com/761/testmod_zip

Ai in linku asta un exemplu.
-Am pus in .htaccess
RewriteBase /testmod/
casa iti mearga si din folder.
- Trebuie sa pui in lib/Zend/ librariile de ZF

Apache/2.2.4 (Win32) PHP/5.2.3 ZendFramework 1.5.1
take a look.
Sus  
joe_black



Data înscrierii: 03/Mai/2006
Mesaje: 42

Trimis: Joi Apr 10, 2008 5:12 pm    Titlul subiectului:  

Nah. Uite ca cineva m-a lamurit.

Cand extindeam My_Controller_Front
aveam
Cod:
class My_Controller_Front extends Zend_Controller_Front
{
    [b]protected static $_instance;[/b]
    public static function getInstance ()
    {
        if (null === self::$_instance) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

}



Linia aia cu protected static $_instance facea toate magariile.
Sus  
Amenthes



Data înscrierii: 12/Dec/2005
Mesaje: 384

Trimis: Joi Apr 10, 2008 9:14 pm    Titlul subiectului:  

Am incercat si eu fara si am vazut ca merge, acum incerc sa inteleg si de ce.
Sus  
joe_black



Data înscrierii: 03/Mai/2006
Mesaje: 42

Trimis: Vin Apr 11, 2008 12:29 pm    Titlul subiectului:  

:)

aici ai o explicatie exact pe tema asta.
http://weierophinney.net/matthew/archives/135-Extending-Singletons.html

1.cand redeclari $_instance in clasa fiu nu folosesti $_instance din clasa parinte si deci noua instanta e valabila numa pt clasa ta. Asta nu ar fi o problema asa de mare daca nu ai avea :

2. In o gramada de fisiere si incluzand Zend_Controller_Route_Abstact se face $controller = Zend_Controller_Front.

La linia asta tu vrei sa-ti intoarca o instanta a My_Controller_Front nu a Zend_Controller_Front

Spune-mi daca ai inteles
Sus  
Amenthes



Data înscrierii: 12/Dec/2005
Mesaje: 384

Trimis: Vin Apr 11, 2008 2:20 pm    Titlul subiectului:  

Citat:
...cand redeclari $_instance in clasa fiu nu folosesti $_instance din clasa parinte...


Si intrebarea continua, de ce? :) Pentru ca mie nu mi se pare normal.
E din cauza unei bube a PHP-ului, late static binding.
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community