Zend MVC - избавиться от публичной папки - PullRequest
3 голосов
/ 03 февраля 2010

All, My PHP Zend MVC Структура приложения выглядит следующим образом:

billingsystem
 -application
 -design
 -public
    --index.php
    --.htaccess
 -library
    -- Zend

всякий раз, когда приложение загружается, оно переходит в index.php в публичной папке и оттуда перенаправляется. Я хочу сделатьуверен, что пользователи получают доступ к системе, перейдя по http://billingsystem/ вместо http://billingsystem/public. Это соглашение Zend для сохранения общей папки.или можно от него избавиться и переместить файлы в корневой каталог?Я попытался сделать это, но мое приложение с треском провалилось, так как оно не может найти библиотеку Zend и загрузить ее классы. Часть моего кода index.php выглядит так:

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

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

// Ensure include/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../include'),
    get_include_path(),
)));

// Ensure application/models is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../application/models'),
    get_include_path(),
)));

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

//Autoload Zend Classes
Zend_Loader::loadClass('Zend_Loader_Autoloader');
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);

Спасибо

Ответы [ 4 ]

3 голосов
/ 03 февраля 2010

ZF предполагает, что вы будете устанавливать корневой каталог вашего хоста в общую папку. Это, по сути, так, чтобы вы могли иметь свой код приложения вне «публичного» пространства. Если вы используете сервер Apache, вы должны изменить директиву DocumentRoot в файле httpd.conf (1.x) или apache2.conf (2.x). Ваш сервер может иметь DocumentRoot, и вы также можете создать VirtualHosts, каждый из которых имеет DocumentRoots. Вот достойное руководство по настройке виртуальных хостов для ваших сайтов: http://apptools.com/phptools/virtualhost.php. В вики Zend также есть хороший пример: http://framework.zend.com/wiki/display/ZFDEV/Configuring%2BYour%2BURL%2BRewriter

1 голос
/ 11 февраля 2010

Роб Аллен объясняет, как этого добиться здесь

http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/

По сути, вы сохраняете структуру своего проекта такой, какая она есть.

Вы создаете файл index.php на том же уровне вашей / общедоступной папки со следующим

<?php 
define('RUNNING_FROM_ROOT', true);
include 'public/index.php';

Также создайте новый файл .htaccess на том же уровне вашей / общедоступной папки с этим

SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteRule .* index.php

Затем вам нужно сделать несколько уловок в вашем приложении о том, как ссылаться на статическое содержимое. Это зависит от вашей собственной реализации, см. Ссылку на реализацию, предоставленную Робом Алленом.

0 голосов
/ 21 сентября 2015
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

Просто измените этот путь на

defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));

и переместите файл index.php и .htaccess в корневую папку.

0 голосов
/ 03 февраля 2010

EDIT:

С вашей конфигурацией вам нужно изменить следующее:

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

После этого вы можете переместить содержимое public в корневой каталог документа, и оно должно работать.

НЕ ЗАБЫВАЙТЕ / НЕ ИГНОРИРУЙТЕ ЧАСТЬ О файлах .htaccess в непубличных каталогах.

Это сказало, что действительно было бы лучше использовать соглашение, которое я описал. Откровенно говоря, если ваш хост не позволяет вам создавать файлы вне хостов коммутатора id корневого документа.


Обычно принято, что папка public - это корень документа, а все остальные папки находятся за пределами корня документа. Поэтому http://billingsystem.com должен отображаться на path/to/project/public через виртуальный хост или конфигурацию хоста по умолчанию. Не очень хорошая идея иметь все в корне документа. Если вы помещаете все в корневой каталог документа, поскольку у вас нет доступа к нему вне его, вам нужно изменить конфигурацию:

в index.php

APPLICATION_PATH должно быть realpath(dirname(__FILE__).'/application');

Тогда вы захотите убедиться, что вы уронили .htaccess в library, application и tests, которые запрещают любой веб-доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...