Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Zend_Framework] Zmiana ścieżek.
Forum PHP.pl > Forum > Przedszkole
cykcykacz
Zmieniam układ katalogów w mojej aplikacji opartej o Framework Zend. Stary układ katalogów:
-application
--configs
--controllers
--forms
--layouts
--models
--plugins
--views
--Bootstrap.php
-library
-public
--index.php
Nowy układ katalogów:
-application
--configs
--layouts
--modules
---admin
----controllers
----forms
----models
----views
---default
----controllers
----forms
----models
----views
---library
----controllers
----forms
----models
----views
--views
--Bootstrap.php
-library
-public
--index.php
Dostaje taki komunikat błędu:
CODE

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("ErrorController")' in C:\XAMPP\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php:347 Stack trace: #0 C:\XAMPP\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php(256): Zend_Controller_Dispatcher_Standard->loadClass('ErrorController') #1 C:\XAMPP\xampp\php\PEAR\Zend\Controller\Front.php(946): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #2 C:\XAMPP\xampp\php\PEAR\Zend\Application\Bootstrap\Bootstrap.php(77): Zend_Controller_Front->dispatch() #3 C:\XAMPP\xampp\php\PEAR\Zend\Application.php(358): Zend_Application_Bootstrap_Bootstrap->run() #4 C:\XAMPP\xampp\htdocs\testy\public\index.php(27): Zend_Application->run() #5 {main} thrown in C:\XAMPP\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php on line 347

Mój Bootstrap.php:
CODE

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
private $_acl;

protected function _initAutoLoad() {

$modelLoader = new Zend_Application_Module_AutoLoader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH,
'resourceTypes' => array (
'validator' => array(
'path' => 'views/validators',
'namespace' => 'Validator'
)
)
))

;
/* if(Zend_Auth::getInstance()->hasIdentity())
{
Zend_Registry::set('role',Zend_Auth::getInstance()->getStorage()->read()->role );
} else {
Zend_Registry::set('role', 'guest');
}

$this->_acl = new Model_LibraryAcl;
$this->_auth = Zend_Auth::getInstance();

$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin(new Plugin_AccessCheck($this->_acl)); */


return $modelLoader;
}

function _initViewHelpers() {
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getview();

$view->setHelperPath(APPLICATION_PATH. '/helpers', '');
Zend_Dojo::enableView($view);

$view->doctype('HTML4_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type','text/html; charset=UTF-8')
->appendHttpEquiv('Content-Language','pl-PL')
->appendName('description', 'Using view helpers in Zend_view');

$view->headTitle()->setSeparator(' - ');
$view->headTitle('Sala');

$navContainerConfig = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navContainer = new Zend_Navigation($navContainerConfig);

$view->navigation($navContainer);/*->setAcl($this->_acl)->setRole(Zend_Registry::get('role'));*/
}

}

index.php
CODE

<?php

// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(dirname(__FILE__) . '/../library'),
realpath(dirname(__FILE__) . '/../application'),
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();

application.ini
CODE

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules = ""
autoloadernamespaces.0 = "Zend_"
autoloadernamespaces.1 = "forms_"
resources.layout.layoutpath = APPLICATION_PATH "/layouts"

resources.db.adapter = mysqli
resources.db.isDefaultAdapter = true
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = 54ajmon5
resources.db.params.dbname = zftutorial
resources.db.params.charset = 'utf8'

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Proszę o pomoc smile.gif
Pozdrawiam
zend
Pododawaj ścieżki do kontrolerów setControllerDirectory
cykcykacz
Hej, jednak nie do końca udało się rozwiązać mój problem nadal proszę o pomoc.
Zmieniam układ aplikacji na wzór tutorialu -> http://www.youtube.com/watch?v=heDPuEaCn7w
Obecnie męczę się z błędem
Kod
Fatal error: Class 'Default_Model_LibraryAcl' not found in C:\XAMPP\xampp\htdocs\testy\application\Bootstrap.php  on line 28

Dodałem do pliku application.ini regułke:
Kod
resources.frontController.params.prefixDefaultModule = "1"

Pododawałem do wszystkich kontrolerów oraz model prefix Default_
Jednak gdy zacząłem dodawać Role oraz przywileje w pliku LibraryAcl.php oraz do klasy dodałem prefix Default dostaje owy komunikat o błędzie.
Podam moją strukture katalogów wraz ze wszystkimi plikami następnie kod plika Bootstrap.php oraz LibraryACL.php.
Struktura katalogów:
CODE

-application
--configs
---application.ini
---navigation.xml
--layouts
---layout.phtml
--modules
---admin
----controllers
----forms
----models
----views
-----filters
-----helpers
-----scripts
---default
----controllers
-----AddeventController.php
-----AddsalaController.php
-----AuthenticationController.php
-----ContactController.php
-----ErrorController.php
-----IndexController.php
-----RegistrationController.php
-----SalaController.php
-----SaleController.php
-----UsersController.php
----forms
-----Account.php
-----Addevent.php
-----Addsala.php
-----ContactForm.php
-----LoginForm.php
-----RegistrationForm.php
-----Search.php
-----Users.php
----models
------DbTable
-------Categories.php
-------Facilities.php
-------Photos.php
-------Province.php
-------Sale.php
-----LibraryAcl.php
-----Listcity.php
-----Listsale.php
-----Multi.php
----Plugins
-----AccessCheck.php
----views
-----filters
-----helpers
-----scripts
------pagination.phtml
---library
----controllers
----forms
----models
----views
-----filters
-----helpers
-----scripts
--Bootstrap.php
-library
-public

Plik Bootstrap.php
CODE

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
private $_acl;

protected function _initAutoLoad() {

$modelLoader = new Zend_Application_Module_AutoLoader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH,'/modules/default',
'resourceTypes' => array (
'validator' => array(
'path' => 'views/validators',
'namespace' => 'Validator'
)
)
))

;
if(Zend_Auth::getInstance()->hasIdentity())
{
Zend_Registry::set('role',Zend_Auth::getInstance()->getStorage()->read()->role );
} else {
Zend_Registry::set('role', 'guests');
}

$this->_acl = new Default_Model_LibraryAcl;
$this->_auth = Zend_Auth::getInstance();

$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin(new Plugin_AccessCheck($this->_acl));


return $modelLoader;
}

function _initViewHelpers() {
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getview();

$view->setHelperPath(APPLICATION_PATH. '/helpers', '');
Zend_Dojo::enableView($view);

$view->doctype('HTML4_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type','text/html; charset=UTF-8')
->appendHttpEquiv('Content-Language','pl-PL')
->appendName('description', 'Using view helpers in Zend_view');

$view->headTitle()->setSeparator(' - ');
$view->headTitle('Sala');

$navContainerConfig = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navContainer = new Zend_Navigation($navContainerConfig);

$view->navigation($navContainer)->setAcl($this->_acl)->setRole(Zend_Registry::get('role'));
}

}

Plik LibraryACL.php
CODE

<?php
class Default_Model_LibraryAcl extends Zend_Acl {
public function __construct() {
$this->addRole(new Zend_ACL_Role('guests'));
$this->addRole(new Zend_ACL_Role('users'), 'guests');
$this->addRole(new Zend_ACL_Role('admins'), 'users');

$this->add(new Zend_ACL_Resource('library'))
->add(new Zend_ACL_Resource('library:sale'), 'library')
->add(new Zend_ACL_Resource('library:sala'), 'library');

$this->add(new Zend_ACL_Resource('admin'))
->add(new Zend_ACL_Resource('admin:users'), 'admin')
->add(new Zend_ACL_Resource('admin:addsala'), 'admin');

$this->add(new Zend_ACL_Resource('default'))
->add(new Zend_ACL_Resource('default:authentication'), 'default')
->add(new Zend_ACL_Resource('default:index'), 'default')
->add(new Zend_ACL_Resource('default:error'), 'default')
->add(new Zend_ACL_Resource('default:addevent'), 'default')
->add(new Zend_ACL_Resource('default:registration'), 'default')
->add(new Zend_ACL_Resource('default:contact'), 'default');

$this->allow('guests', 'default:authentication', 'login' );
$this->allow('guests', 'default:error', 'error' );

$this->deny('users', 'default:error', 'login' );

$this->allow('users', 'default:index', 'index' );
$this->allow('users', 'default:authentication', 'logout' );
$this->allow('users', 'default:sale', array('index', 'list') );

$this->allow('admins', 'admin:sale', array('index', 'list') );
}
}

Plik application.ini
CODE

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.prefixDefaultModule = "1"
resources.modules = ""
autoloadernamespaces.0 = "Zend_"
autoloadernamespaces.1 = "forms_"
resources.layout.layoutpath = APPLICATION_PATH "/layouts"

resources.db.adapter = mysqli
resources.db.isDefaultAdapter = true
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = 54ajmon5
resources.db.params.dbname = zftutorial
resources.db.params.charset = 'utf8'

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Wszystkie pliki kontrolerów, moduls, oraz action Plugin, navigation są w module default.
zend
autoloadernamespaces.2 = "Default_" w konfiguracji
cykcykacz
CODE


Warning: include(Default\Model\LibraryAcl.php) [function.include]: failed to open stream: No such file or directory in C:\XAMPP\xampp\php\PEAR\Zend\Loader.php on line 83

Warning: include() [function.include]: Failed opening 'Default\Model\LibraryAcl.php' for inclusion (include_path='C:\XAMPP\xampp\htdocs\testy\application/../library;C:\XAMPP\xampp\htdocs\testy\library;C:\XAMPP\xampp\htdocs\testy\application;.;C:\XAMPP\xampp\php\PEAR') in C:\XAMPP\xampp\php\PEAR\Zend\Loader.php on line 83

Fatal error: Class 'Default_Model_LibraryAcl' not found in C:\XAMPP\xampp\htdocs\testy\application\Bootstrap.php on line 28
zend
Czy masz dobrze podane ścieżki możesz sprawdzić ładując ten plik ręcznie require_once('Default/Model/LibraryAcl.php'); Możesz popróbować też z setFallbackAutoloader
cykcykacz
Taka jest ścieżka poprawna require_once('modules/default/models/LibraryAcl.php');
Wtedy wszystko prawie działa ok brakuje mi jeszcze menu, navigation.xml które jest w katalogu config.
Jeżeli wiesz jak pozbyć się tego
Kod
require_once('modules/default/models/LibraryAcl.php');

Oraz zrobić menu navigation.xml proszę o lekarstwo. worriedsmiley.gif
zend
Dodaj katalog modules do include_path, navigation.xml otwierasz przez Zend_Config_Xml i ustawiasz do navigacji
cykcykacz
Chodzi ci o to? W pliku application.ini
Kod
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
includePaths.modules = APPLICATION_PATH "/../application/modules"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.prefixDefaultModule = "1"
resources.modules = ""
autoloadernamespaces.2 = "Default_"
autoloadernamespaces.0 = "Zend_"
autoloadernamespaces.1 = "forms_"
resources.layout.layoutpath = APPLICATION_PATH "/layouts"

Czy też może w public/index.php
Kod
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(dirname(__FILE__) . '/../library'),
    realpath(dirname(__FILE__) . '/../application'),
    realpath(dirname(__FILE__) . '/../application/modules'),
    get_include_path(),
)));

Chyba zrobiłem to nie poprawnie nadal nie może znaleźć klasy smile.gif
Natomiast co jest grane z navigation.xml też nie mam pojęcia
Kod
$navContainerConfig = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
        $navContainer = new Zend_Navigation($navContainerConfig);

        $view->navigation($navContainer);//->setAcl($this->_acl)->setRole(Zend_Registry::get('role'));

Jeżeli ta linijka jest w postaci komentarza czyli jej nie ma wszystko jest ok. Natomiast po odkomentowaniu niewidać nawigacji sad.gif
Kod
//->setAcl($this->_acl)->setRole(Zend_Registry::get('role'));
zend
Masz role ustawione w navigacji? Linuź rozróżnia małe i wielkie litery, zmień pierwsze litery katalogów na wielkie litery albo zmień wielkie postosuj nazwę klasy do katalogu w którym się znajduje "default_model_acl"
cykcykacz
Co tak dokładnie ten kod oznacza?
Kod
resources.frontController.params.prefixDefaultModule = "1"


W navigation mam ustawione role przypuszczam, że chodzi o to
Kod
        <logout>
            <label>Konferencyjne</label>
            <module>default</module>
            <controller>sale</controller>
            <action>listkonferencyjne</action>
            <resource>default:authentication</resource>
            <params>
                <categories>konferencyjne</categories>
            </params>
        </logout>

Dziwne, muszę pokombinować, jeżeli masz jeszcze jakieś pomysły będę wdzięczny 3 dzień z tym dość prostym problemem walczę i nie mogę się uporać.
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.