| 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: 389
|
| 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: 389
|
| 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: 389
|
| 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: 389
|
| 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 |
|
| |