Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Ładowanie klasy z znakami _ .
Forum PHP.pl > Forum > PHP > Frameworki
szypi1989
Witam.Gdy chce dla przykłady utworzyć obiekt klasy Form_Tab która dziedziczy po Zend_Form.Która znajduje się w folderze model to tworząc obiekt Zend szuka mi tej klasy jako Form\Tab.php.I nie mogę ładować tych klas które mają znak "_".Jak sobie z tym poradzić? proszę o pomoc
melkorm
Tak działa autoloader Zend'a i jego konwencja nazw czyli gdzie underscore jest zamieniany na slash.

Poradzić hm szczerze to nigdy tego nie potrzebowałem, ogólnie nie używa się underscore jeżeli klasa nie jest w zagnieżdżonym folderze, można bawić się z autoloaderem, ale szczerze nigdy tego nie próbowałem smile.gif
szypi1989
właśnie pozmieniałem ten underscore na normalne znaki.Ale w przyszłości chciałbym wiedzieć czy jest jakieś wyjście na to.Bo w dokumentacji Zend czasami są takie przykłady właśnie połączone z underscore:-( i tylko trzeba usuwać to.
Crozin
PHP ma pewne konwencje co do nazewnictwa klas.

  • eżeli korzystasz z przestrzeni nazw stosujesz CamelCase (z wielką pierwszą literą każdego członu), czyli przykładowo:
    • MyProject\XML\XMLDocument
    • MyProject\XML\XMLDocumentParser
  • Jeżeli nie możesz skorzystać z przestrzeni nazw to wykorzystujesz znak podkreślenia do zobrazowania hierarchii:
    • MyProject_XML_Document
    • MyProject_XML_Document_Parser
Zauważ, że w zmiana nie dotyczy tylko "\" i "_".

Tych konwencji powinieneś się trzymać.
singles
Cytat(szypi1989 @ 27.01.2011, 15:28:23 ) *
Witam.Gdy chce dla przykłady utworzyć obiekt klasy Form_Tab która dziedziczy po Zend_Form.Która znajduje się w folderze model to tworząc obiekt Zend szuka mi tej klasy jako Form\Tab.php.I nie mogę ładować tych klas które mają znak "_".Jak sobie z tym poradzić? proszę o pomoc

Bo ta klasa powinna znajdować się w folderze application/forms.

Tak jak wcześniej powiedziane, ZF zamienia nazwę klasy na jej lokalizację w strukturze plików.

Z tym, że domyślnie posiada zdefiniowanie kilka ścieżek do tzw. 'resource' - patrz tutaj => http://framework.zend.com/manual/en/zend.l...r-resource.html. Co to znaczy?

Znaczy to, że ZF będzie szukał klas na takiej zasadzie:
  1. $form = new Form_Tab() // => application/forms/Tab.php
  2. $model = new Model_Customer() // => application/models/Customer.php
  3. $plugin = new Service_FooBar() // => application/services/FooBar.php

Jednak należy zwrócić uwagę, że podczas ładowania klas Zend szuka automatycznie klas z dodanym prefixem aplikacji - domyślnie brzmi on "Application". Zmienia się to w pliku .ini:
Kod
appnamespace = "My"

Jeśli będziesz miał taki wpis jak wyżej, musisz nazywać klasy razem z tym prefixem, czyli My_Form_tab, My_Model_Customer. Aby ZF znajdował klasy bez prefixu, takie jak Twoja Zend_Tab musisz ustawić appnamespace na pustą wartość:
Kod
appnamespace = ""


Trochę więcej informacji na temat domyślnego autoloadera znajdziesz w tutorialu Roba Allena (dział Model): http://akrabat.com/zend-framework-tutorial/

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.