Skocz do zawartości

Zend Framework i model


PawelC

Rekomendowane odpowiedzi

Mam taki problem, napisałem sobie model i wszystko było by super gdyby nie to, że wywala mi błąd. Krótko mówiąc, jak wgram model Album.php do katalogu application/models to go nie widzi, a jak wgram do katalogu library to wszystko chodzi elegancko. Tak wygląda model:

<?php
class Album extends Zend_Db_Table {

public $_name = "gd_pliki";

}

Tak wygląda kontroler który korzysta z modelu Album

<?php

class HelloController extends Zend_Controller_Action
{

public function init()
{
	$this->view->baseUrl = $this->_request->getBaseUrl();
	Zend_Loader::loadClass('Album'); 
}


public function indexAction()
{
	$view=new Zend_View();
	$album = new Album();
	$this->view->albums = $album->fetchAll(); 

}




}

Domyślam się że gdzieś zrobiłem błąd, tylko nie wiem gdzie, i pewnie lezy on w tym, że nie podałem ścieżki.

Odnośnik do komentarza
Udostępnij na innych stronach

Ustawiłeś-> " Zaprezentowany tutaj został przykład użycia Zend::loadClass() do ładowania naszych klas, a działa dzięki temu, że nasz katalog modeli umieściliśmy w include_path w pliku index.php. " ?

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Z tego wynika, że Zend_Loader::loadClass('Album'); szuka pliku Album.php w katalogu library.

Nie korzystam z ZF wiec Ci nie powiem jak działa te ladowanie, ale jest opisane https://www.heavymind.net/zend-framework-tu...anie-aplikacji/ nie wiem jak to wygląda w aktualnej wersji, ale jest z pewnością w dokumentacji ZF'a

---

Tak na marginesie jak zaczynasz zabawę z ZF to stracisz więcej czasu na posty na forum niż na napisanie prostej aplikacji w tym ;)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Wrzucać możesz gdzie chcesz i je następnie includować w skrypcie php, ale nie o to chodzi. Chodzi o pewien podział aplikacji na elementy-pliki i umieszczenie ich w określonych miejscach w strukturze katalogów - tak jak w kohana.

---

Z samej ciekawości testowałem na przykładzie z https://akrabat.com/zend-framework-tutorial/

i w index.php dałem:

<?php

define('APPLICATION_PATH','/home/webtester/domains/webtester.pl/public_html/zend/application');

define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
set_include_path('.' . PATH_SEPARATOR . './library'. PATH_SEPARATOR . './application/modelsy/'. PATH_SEPARATOR . get_include_path());

/** Zend_Application */
require_once 'Zend/Application.php';  

// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV, 
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()->run();

index.php jest w ścieżce

/home/webtester/domains/webtester.pl/public_html/zend

/home/webtester/domains/webtester.pl/public_html/zend/library

/home/webtester/domains/webtester.pl/public_html/zend/application

I "inckudowanie modeli działa jak należy

w kontlorerze nie musisz już robić Zend_Loader::loadClass('Album'); które jest w tym wypadku zbędne

class IndexController extends Zend_Controller_Action
{

public function init()
{
	/* Initialize action controller here */
}

public function indexAction()
{
	$this->view->title = "My Albums";
	$this->view->headTitle($this->view->title, 'PREPEND');
	$albums = new Model_DbTable_Albums();
	$this->view->albums = $albums->fetchAll();
}

Jednym słowem wszystko zależy od prawidłowej konfiguracji i zrozumienia zasad jak działa te auto loadery klas ;)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem jaką masz strukturę katalogów, gdzie leży Twój index.php ale ja robię tak:

application/controllers/
application/models/
application/views/
cache/
lib/
public/index.php

Wszystkie żądania idą to pliku index.php w którym mam zapis

set_include_path('.' .PATH_SEPARATOR . '../lib'. PATH_SEPARATOR . get_include_path());

Mam też swoją klasę dziedziczącą z Zend_Controller_Action i w niej ustawiam sobie dodatkowe elementy np. załadowanie modeli wszystkich poprzez set_include_path dla katalogu ../application/models/ i teraz zamiast dziedziczyć w kontrolerach po Zend_Controller_Action to dziedziczę po tej swojej klasie w której mam poustawiane wszystko.

No i nigdzie nie ładuje ręcznie klas wystarczy dać w index.php

require_once("Zend/Loader.php");   
Zend_Loader::registerAutoload();

Odnośnik do komentarza
Udostępnij na innych stronach

Mam tak:

Model:

<?php
class Model_Album extends Zend_Db_Table {


public $_name = "gd_pliki";


}

Kontroler:

<?php

class HelloController extends Zend_Controller_Action
{



public function init()
{
	$this->view->baseUrl = $this->_request->getBaseUrl();


}

public function indexAction()
{	
	$view=new Zend_View();
	$album = new Model_Album();
	$this->view->albums = $album->fetchAll(); 

}




}

i plik index.php

<?php

define('APPLICATION_PATH','c:/wamp/www/application');

define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
set_include_path('.' . PATH_SEPARATOR . './library'. PATH_SEPARATOR . './application/models/'. PATH_SEPARATOR . get_include_path());

/** Zend_Application */
require_once 'Zend/Application.php';  

// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()->run();

I dostaje taki komunikat:

Fatal error: Class 'Album' not found in C:\wamp\www\application\controllers\HelloController.php on line 18

Wszystko wywale i skonfiguruje na nowo

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności