Początek tutoriala zf2 - nie wiem co powoduje błąd

0

Próbuję nauczyć się zf2 więc zacząłem od jedynego słusznego źródła czyli oficjalnego podręcznika użytkownika na stronie zenda.
http://framework.zend.com/manual/current/en/user-guide/overview.html

Doszedłem do kroku "Database and models", wykonywałem wszystko tak jak jest opisane i gdy próbuję wywołać stronę z listą albumów (http://zf2.localhost/album, bo mam wirtualnego hosta skonfigurowanego jako zf2, nie zf2-tutorial) dostaję taki oto niewiele mi mówiący błąd:

namespace Album; use Zend\ModuleManager\Feature\AutoloaderProviderInterface; use Zend\ModuleManager\Feature\ConfigProviderInterface; use Album\Model\Album; use Album\Model\AlbumTable; use Zend\Db\ResultSet\ResultSet; use Zend\Db\TableGateway\TableGateway; class Module implements AutoloaderProviderInterface, ConfigProviderInterface { public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( DIR . '/autoload_classmap.php', ), 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( NAMESPACE => DIR . '/src/' . NAMESPACE, ), ), ); } public function getConfig() { return include DIR . '/config/module.config.php'; } public function getServiceConfig() { return array( 'factories' => array( 'Album\Model\AlbumTable' => function($sm) { $tableGateway = $sm->get('AlbumTableGateway'); $table = new AlbumTable($tableGateway); return $table; }, 'AlbumTableGateway' => function ($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Album()); return new TableGateway('album', $dbAdapter, null, $resultSetPrototype); }, ), ); } }
Fatal error: Uncaught exception 'Zend\ModuleManager\Exception\RuntimeException' with message 'Module (Album) could not be initialized.' in /home/spectator/webprojects/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php:195 Stack trace: #0 /home/spectator/webprojects/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php(169): Zend\ModuleManager\ModuleManager->loadModuleByName(Object(Zend\ModuleManager\ModuleEvent)) #1 /home/spectator/webprojects/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php(96): Zend\ModuleManager\ModuleManager->loadModule('Album') #2 [internal function]: Zend\ModuleManager\ModuleManager->onLoadModules(Object(Zend\ModuleManager\ModuleEvent)) #3 /home/spectator/webprojects/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(444): call_user_func(Array, Object(Zend\ModuleManager\ModuleEvent)) #4 /home/spectator/webprojects/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.p in /home/spectator/webprojects/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php on line 195

Php, sqla, itd używam w najnowszych stabilnych dostępnych wersjach. LAMP-a mam skonfigurowanego pod lubuntu 15.04 amd64. CHMOD dla folderu webprojects ustawiony na 755 (tak jak doradzano w komentarzach do tego podręcznika). To już któraś próba pod rząd z rozpoczynaniem wzystkiego od nowa w ciągu ostatnich kilku dni i za każdym razem taki sam efekt więc poddałem się i napisałem tutaj mając nadzieję, że ktoś mi da chociaż jakąś wskazówkę w tym co może być nie tak, co robię nie tak jak powinienem.

0

Mnie to wygląda jakby moduł Album włączał tryb php przez <?, a Twoja konfiguracja php.ini tego nie zezwala (short_open_tag).
Zamień <? na <?php, albo zmień php.ini

0

Zedytowałem php.ini, na wszelki wypadek zresetowałem apache i niestety dalej to samo. Sprawdziłem w innej przeglądarce (jakby to miało sens xD ) i dalej to samo.

Gdy odpalam poprzez "localhost/album" dostaję krótszy błąd:

namespace Album; use Zend\ModuleManager\Feature\AutoloaderProviderInterface; use Zend\ModuleManager\Feature\ConfigProviderInterface; use Album\Model\Album; use Album\Model\AlbumTable; use Zend\Db\ResultSet\ResultSet; use Zend\Db\TableGateway\TableGateway; class Module implements AutoloaderProviderInterface, ConfigProviderInterface { public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( DIR . '/autoload_classmap.php', ), 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( NAMESPACE => DIR . '/src/' . NAMESPACE, ), ), ); } public function getConfig() { return include DIR . '/config/module.config.php'; } public function getServiceConfig() { return array( 'factories' => array( 'Album\Model\AlbumTable' => function($sm) { $tableGateway = $sm->get('AlbumTableGateway'); $table = new AlbumTable($tableGateway); return $table; }, 'AlbumTableGateway' => function ($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Album()); return new TableGateway('album', $dbAdapter, null, $resultSetPrototype); }, ), ); } }

0

Ewidentnie widać, że masz wyświetlony kod PHP, a nie wykonywany.

Wklej zawartość tego pliku, którego treść się tutaj wyświetla.

0

Jeśli się nie mylę jest to plik Module.php, a jego kompletna zawartość prezentuje się następująco:

namespace Album;

 use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
 use Zend\ModuleManager\Feature\ConfigProviderInterface;
 use Album\Model\Album;
 use Album\Model\AlbumTable;
 use Zend\Db\ResultSet\ResultSet;
 use Zend\Db\TableGateway\TableGateway;

 class Module implements AutoloaderProviderInterface, ConfigProviderInterface
 {
     public function getAutoloaderConfig()
     {
         return array(
             'Zend\Loader\ClassMapAutoloader' => array(
                 __DIR__ . '/autoload_classmap.php',
             ),
             'Zend\Loader\StandardAutoloader' => array(
                 'namespaces' => array(
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ),
             ),
         );
     }

     public function getConfig()
     {
         return include __DIR__ . '/config/module.config.php';
     }
     public function getServiceConfig()
     {
         return array(
             'factories' => array(
                 'Album\Model\AlbumTable' =>  function($sm) {
                     $tableGateway = $sm->get('AlbumTableGateway');
                     $table = new AlbumTable($tableGateway);
                     return $table;
                 },
                 'AlbumTableGateway' => function ($sm) {
                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                     $resultSetPrototype = new ResultSet();
                     $resultSetPrototype->setArrayObjectPrototype(new Album());
                     return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
                 },
             ),
         );
     }
 }

0

Czyli W OGÓLE nie ma na początku ani <?php, ani nawet <? ?

0

Tak, w wielu plikach nie miałem początku i końca php, pododawałem je. po prostu myślałem, że w zendzie nie trzeba ich umieszczać w kodzie skoro tak pokazują kod.
Teraz z kolei mam jeszcze lepszy cyrk, nadal wyświetla mi błąd i fragment kodu. Czyli wygląda to tak jakby kod był wykonywany do pewnego znaku, a potem już nie.

Obecna pełna zawartość pliku Module.php:

<?
namespace Album;

 use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
 use Zend\ModuleManager\Feature\ConfigProviderInterface;
 use Album\Model\Album;
 use Album\Model\AlbumTable;
 use Zend\Db\ResultSet\ResultSet;
 use Zend\Db\TableGateway\TableGateway;

 class Module implements AutoloaderProviderInterface, ConfigProviderInterface
 {
     public function getAutoloaderConfig()
     {
         return array(
             'Zend\Loader\ClassMapAutoloader' => array(
                 __DIR__ . '/autoload_classmap.php',
             ),
             'Zend\Loader\StandardAutoloader' => array(
                 'namespaces' => array(
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ),
             ),
         );
     }

     public function getConfig()
     {
         return include __DIR__ . '/config/module.config.php';
     }
     public function getServiceConfig()
     {
         return array(
             'factories' => array(
                 'Album\Model\AlbumTable' =>  function($sm) {
                     $tableGateway = $sm->get('AlbumTableGateway');
                     $table = new AlbumTable($tableGateway);
                     return $table;
                 },
                 'AlbumTableGateway' => function ($sm) {
                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                     $resultSetPrototype = new ResultSet();
                     $resultSetPrototype->setArrayObjectPrototype(new Album());
                     return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
                 },
             ),
         );
     }
 }
?>

Treść wyświetlana w przeglądarce przy próbie uruchomienia aplikacji Album:

array( DIR . '/autoload_classmap.php', ), 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( NAMESPACE => DIR . '/src/' . NAMESPACE, ), ), ); } public function getConfig() { return include DIR . '/config/module.config.php'; } public function getServiceConfig() { return array( 'factories' => array( 'Album\Model\AlbumTable' => function($sm) { $tableGateway = $sm->get('AlbumTableGateway'); $table = new AlbumTable($tableGateway); return $table; }, 'AlbumTableGateway' => function ($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Album()); return new TableGateway('album', $dbAdapter, null, $resultSetPrototype); }, ), ); } } ?>

Zawsze trafiam na jakieś kwiatki gdy próbuję uczyć się czegoś nowego w programowaniu, identycznie miałem przy php jak się uczyłem z jednej najpopularniejszych książek, potem okazało się, że po prostu kod w niej zamieszczony był zły xD

0

Spróbuj zamiast <? dać <?php Być może twój interpreter nie pozwala na użycie short tagów. Ewentualnie zmień konfigurację php. W php.ini ustaw opcję: short_open_tag=On

Pokaż jeszcze strukturę katalogów tej aplikacji.

0

Tak, okazuje się, że shorttagi pomimo włączenia w php.ini nie działają. Teraz dostaję błąd 404, ale z tym już powinienem sam sobie poradzić, w razie czego znowu napiszę.

Dzięki za pomoc.

0

Zapewne edytujesz nie ten php.ini co trzeba - albo nie zrestartowałeś serwera www po dokonaniu zmiany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1