У меня возник вопрос о развертывании проекта Zend на сервере. На localhost я использовал виртуальный хост, чтобы установить корень документа в папку public / index.php.
Мне нужны советы, спасибо
Application.ini:
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" resources.view[] = resources.db.isDefaultTableAdapter = true resources.db.adapter = PDO_MYSQL resources.db.params.charset = "utf8" resources.db.params.host = HOST resources.db.params.username = "p" resources.db.params.password = "***" resources.db.params.dbname = "p" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
Index.php:
<?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')); defined('DESTINATION_IMAGES') || define('DESTINATION_IMAGES', './usersImages/'); defined('TRUE_STORY_EMAIL') || define('TRUE_STORY_EMAIL', 'mmm@gmail.com'); defined('TRUE_STORY_NAME') || define('TRUE_STORY_NAME', 'True story team'); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), 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();
.htaccss:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
phpinfo ();
w Загруженные модули У меня mod_rewrite, поэтому, вероятно, включен.
——– РЕДАКТИРОВАТЬ 04.05.2011 —–
Я снова развернул проект на сервере, и я установил RewriteBase / ~ user2 / Project2 / public
И теперь работает сопоставление URL (вероятно, впервые была ошибка при развертывании, поэтому она не работала).
Но у меня все еще есть проблемы с проектом. Когда я перехожу к контроллеру Auth:
public function indexAction() { // action body $form = new Application_Form_Login(); $request = $this->getRequest(); if ($request->isPost()) { if ($form->isValid($request->getPost())) { try { if ($this->_process($form->getValues())) { $userDT = new Application_Model_DbTable_User(); $idUser = Zend_Auth::getInstance()->getIdentity()->id; if ($userDT->isConfirmed($idUser)) { $this->_helper->redirector->gotoRoute( array( 'controller' => 'index', 'action' => 'index' ) ); } else { $form->setDescription('Your account is not confirmed!'); Zend_Auth::getInstance()->clearIdentity(); $this->_helper->redirector->gotoRoute( array( 'controller' => 'Registration', 'action' => "step", 'idUser' => $idUser ) ); } } else { $form->setDescription('There was an error. Try to log in once again please'); } } catch (Exception $e) { echo $e->getMessage(); } } } $this->view->form = $form; }
На странице я вижу только: ï »¿, и я не знаю, что это значит, поскольку я проверяю, что перенаправление в другом контроллере работает, что означает, что мой проект видит библиотеки zend, поэтому я не могу понять, почему он не создает форму в представлении?
Вид:
<?php $this->headTitle('Login'); ?> <h1>Login</h1> <?php echo $this->form->setAction($this->url()); ?>
Просто скопируйте проект на свой сервер и установите указатель каталога домена в общую папку. В большинстве случаев это должно выполнять эту работу.
Другой подход – настроить файл vhost и установить корень документа . Это нужно, если вы хотите, чтобы проект zf был доступен с субдоменом.
Но это скорее вопрос конфигурации сервера.
Application.ini:
[production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.modules = '' resources.frontController.params.displayExceptions = 1 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" resources.frontController.defaultControllerName = "home" resources.frontController.params.prefixDefaultModule = "1" //some db setup [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
.htaccess:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Надеюсь, вы не изменили файл index.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(APPLICATION_PATH . '/../library'), 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();