Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Wielkośc liter w nazwie modułu
Forum PHP.pl > Forum > PHP > Frameworki
Sajrox
Witam,

Czy jest jakiś sposób na to aby bez większego kombinowania aby w momencie gdy wywołam moduł admin (pisany z małej litery w URL), poprawnie wyszukiwało kontroller Admin_IndexController
W tej chwili aby to działało nazwę katalogu muszę pisać z dużej litery (Admin), oraz w linku URL nmazwę modułu także musze podać z dużej litery.

Czy można w jakiś sposób wyłączyć rozróznianie wielkości liter nazwy modułów?
luki100011
A jak masz zapisane nazwy plików questionmark.gif
U mnie działa z małymi normalnie
Sajrox
Nazwy plików standardowo:

../modules/default/contollers/IndexController.php (klasa: class IndexController extends Default_InitModule)
../modules/admin/contollers/IndexController.php (klasa: class Admin_IndexController extends Admin_InitModule)


Aha dodam że moje kontrolery dziedziczą po kontrolerze globalnym
../modules/default/InitModule.php
../modules/admin/InitModule.php


Z tego co teraz widze nie może wlaśnie odnaleść tych kontrolerów globalnych :/
  1. Fatal error: Class 'Admin_InitModule' not found


W Include path mam
  1. '.'
  2. . PATH_SEPARATOR . BASE_PATH.'/library'
  3. . PATH_SEPARATOR . APP_PATH.'/modules' // tutaj powinno szukać moich kontrolerówe globalnych a jednak nie znajduje :(
  4. . PATH_SEPARATOR . APP_PATH
  5. . PATH_SEPARATOR . BASE_PATH.'/public'
  6. . PATH_SEPARATOR . get_include_path()
  7. );


Niestety błąd
  1. Warning: include(Admin/InitModule.php) [function.include]: failed to open stream: No such file or directory


szuka w katalogu Admin a powinien w admin
Jednak jak zmienie nazwę kontrolera glob. na admin_InitModule otrzymuje
  1. Class 'admin_InitModule' not found in ...


Nic juz nie rozumiem :/
pgrzelka
napisz jak inicjujesz autoloader w bootstrapie
bo tam masz błąd
seth-kk
dodales 'Admin' do namespace?
Sajrox
Problem z wielkością znaków ciąg dalszy :/

Poprzedni problem rozwiązałem przez dodanie w odpowiednie miejsce kodu
  1.  
  2. $InitController = MODULES_PATH.'/'.$this->_module.'/InitModule.php';
  3. if (file_exists($InitController))
  4. require_once($InitController);


Teraz mam kolejny problem dokłądnie z tej samej beczki ale związany z formularzami. Otóż formularze trzymam w katalogach z modułami
./MODULES/admin/Form/(Login.php, Register.php itd..)
./MODULES/default/Form/...

Nazwy klas Formularzy wyglądają tak:
  1. class Admin_Form_Login extends Zend_Form
  2. {
  3. ...
  4.  
  5. class Admin_Form_Register extends Zend_Form
  6. {
  7. ...


I problem jest w tym że na serwerze tych formularzy szuka pod ścieżką:
(Admin/Form/Login.php)
(Admin/Form/Register.php)
itd..

Generalnie chodzi o wielkośc liter nazw modułów szuka w katalogu "Admin" jednak z tego względu że katalogi mam pisane z małej litery "admin"
to analogicznie nie może znaleść klase gdyż Admin i admin to 2 rozne katalogi.
Jak mogę to rozwizać według Was ?

Ustawienie Namespace nic nie daje:
  1. ;autoloader
  2. autoloaderNamespaces.app = "App_"
  3. autoloaderNamespaces.model = "Model_"
  4. autoloaderNamespaces.admin = "Admin_"
  5. autoloaderNamespaces.default = "Default_"



Na windowsie jest ok z wiadomych względów, co zerobić aby na serwerze / Linuxie też działało porpawnie?

seth-kk
Cytat(Sajrox @ 21.11.2009, 18:57:14 ) *
I problem jest w tym że na serwerze tych formularzy szuka pod ścieżką:
(Admin/Form/Login.php)
(Admin/Form/Register.php)
itd..

wiec uzywaj takich a jesli przeszkadzaja ci wielkie znaki w URLu to uzyj helpera z
  1. public function routeShutdown(Zend_Controller_Request_Abstract $request)
  2. {
  3. $request->setModuleName(ucfirst($request->getModuleName()));
  4. }
Sajrox
OK jako tako rozwiązałem problem
  1. // $this->_module <- nazwa modułu
  2. $dirModule = MODULES_PATH.'/'.$this->_module;
  3.  
  4. $loader = new Zend_Application_Module_Autoloader(array(
  5. 'namespace' => ucfirst($this->_module),
  6. 'basePath'&#12288;=> $dirModule,
  7. ));
  8.  
  9. $loader->addResourceTypes(array(
  10. 'forms'&#12288;=> array(
  11. 'path'&#12288;  => 'Form',
  12. 'namespace' => 'Form'&#12288;
  13. ),
  14. ));


Teraz mogę także zastosować to do Modeli itp.

Jakieś sugestie do tego rozwiązania questionmark.gif smile.gif
Jedynym minusem tego rozwiazania jest to że nie będę mógł uzyć Formularz pochodzący z innego modułu niż obecnie aktywny.

..

Kolejny problem z wielkością znaków :/

Tym razem z ActionHelper. CHodzi o to że teraz aby działało musze nazwać klasę helpera:
  1. // Ustawienie Zend_Controller_Action_HelperBroke
  2. // Zend_Controller_Action_HelperBroker::addPrefix($this->_module.'_App_ActionHelpers');
  3.  
  4. admin_App_ActionHelpers_SendVerifyEmail extends Zend_Controller_Action_Helper_Abstract


A chciałbym:
  1. // Ustawienie Zend_Controller_Action_HelperBroke
  2. // Zend_Controller_Action_HelperBroker::addPrefix(ucfirst($this->_module).'_App_ActionHelpers');
  3.  
  4. Admin_App_ActionHelpers_SendVerifyEmail extends Zend_Controller_Action_Helper_Abstract


Czy nie ma prostego sposobu na te problemu z wielkością znaków questionmark.gif sad.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.