Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Ładowanie klas z folderu.
Forum PHP.pl > Forum > Przedszkole
skowron-line
Witam bawię się ZF i napotkałem taki problem, czytam http://akrabat.com/zend-framework-tutorial/ i tam formularze są pobierane z folderu forms.
Ale gdy chcę utworzyć obiekt klasy forms_Login to dostaje błąd że plik lub klasa w pliku nie istnieje.
Kod
[b]Fatal error[/b]: Uncaught exception 'Zend_Exception' with message 'File "Login.php" does not exist or class "forms_Login" was not found in the file' in /var/www/zend/library/Zend/Loader

plik Login.php
  1. class forms_Login extends Zend_Form {
  2.  
  3. public function __construct($options=null)
  4. {
  5. parent::__construct($options);
  6. }
  7. }
batman
class Form_Login i po problemie.
skowron-line
No niestety nie
Kod
[b]Fatal error[/b]:  Class 'Form_Login' not found in [b]/var/www/zend/application/controllers/UsersController.php[/b] on line [b]32[/b]

cały czas dostaje błąd.
darko
Spróbuj:
class Form_LoginForm extends Zend_Form {
...

Chyba, że masz aplikację podzieloną na moduły, to wtedy:

class NazwaModułu_Form_LoginForm extends Zend_Form {
batman
No to spróbuj class Application_Form_Login
darko
a jak nazwałeś plik, w którym masz klasę formularza (folder forms)?
Dla
class Form_LoginForm extends Zend_Form {
plik powinien mieć nazwę: LoginForm.php
skowron-line
@darko
@batman
nic nie pomogło.
Struktura katalogów, może w niej tkwi problem.
Kod
-application
--controllers
--modules
--forms
--views
-library
-html


plik sie nazywa Login.php
klasa pierwotnie się nazywała forms_Login
darko
Nazwij plik LoginForm.php a klasę
class Form_LoginForm extends Zend_Form {
batman
W pliku application.ini dodaj:
appnamespace = "Application"
Klasę nazwij Application_Form_Login.
Wywołanie:
  1. $form = new Application_Form_Login();

Nie może nie działać.
skowron-line
Cytat(batman @ 3.03.2010, 15:25:52 ) *
Nie może nie działać.


Kod
-application
--configs
->application.ini

application.ini
Kod
[production]
appnamespace = "Application"

nazwę klasy zmieniłem.
I nic.
mortus
Brakuje metody w Bootstraperze (application/Bootstrap.php). Metoda powinna wyglądać mniej więcej tak:
  1. <?php
  2. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
  3. protected function _initAutoload() {
  4. $moduleLoader = new Zend_Application_Module_Autoloader(array(
  5. 'namespace' => '',
  6. 'basePath' => APPLICATION_PATH
  7. ));
  8. return $moduleLoader;
  9. }
Metoda może się nazywać jakkolwiek, ale musi zawierać _init w nazwie na początku, a jej drugi człon powinien zaczynać się od dużej litery.
EDIT:
Żadne zmiany w pliku application.ini nie są potrzebne. Plik z formularzem może się nazywać np. Login.php, a deklaracja klasy powinna wtedy wyglądać następująco
  1. class Form_Login extends Zend_Form {
  2. }
batman
~mortus
Nigdy nie skorzystałem z Twojego sposobu i nie miałem problemów z ładowaniem klas. Ten jeden wiersz załatwia sprawę. Oczywiście nazwa nie musi być Application. Można zastosować dowolną inną nazwę. Nawet pustą.

~skowron-line
Spakuj projekt i wystaw gdzieś online. Jak dojadę do domu, to sprawdzę na żywym organizmie.
mortus
Przepraszam za niedopatrzenie. Jeżeli używasz Zend Framework w wersji 1.10.0 lub nowszej to sprawę powinno załatwić to, o czym mówił batman. Metoda, którą podałem może być pomocna w starszych wersjach framewrok-a, choć na pewno nie jest jedyną skuteczną metodą. Wrzuć gdzieś źródło, to popatrzymy.
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.