Zend MVC - 摆脱公共文件夹

时间:2010-02-03 15:55:44

标签: php zend-framework

全部, 我的PHP Zend MVC应用程序结构是这样的:

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

每当应用程序加载时,它都会转到公共文件夹中的index.php,然后从那里重新路由..我想确保用户通过http://billingsystem/访问系统而不是转到{{3} }。这是一个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 个答案:

答案 0 :(得分:3)

ZF假设您将主机的文档根目录设置为公用文件夹。这基本上是因为您可以将应用程序代码放在“公共”空间之外。如果您使用的是apache服务器,则需要在httpd.conf(1.x)或apache2.conf(2.x)文件中修改DocumentRoot指令。您的服务器本身可以具有DocumentRoot,您还可以创建每个都具有DocumentRoot的VirtualHost。这是一个关于为您的网站设置虚拟主机的体面教程:http://apptools.com/phptools/virtualhost.php。在Zend wiki中也有一个很好的例子:http://framework.zend.com/wiki/display/ZFDEV/Configuring%2BYour%2BURL%2BRewriter

答案 1 :(得分:1)

Rob Allen解释了如何实现这一目标

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

基本上,您保持项目结构不变。

使用以下

在/ public文件夹的同一级别创建index.php文件
<?php 
define('RUNNING_FROM_ROOT', true);
include 'public/index.php';

还可以使用此

在/ public文件夹的同一级别创建一个新的.htaccess文件
SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteRule .* index.php

然后你需要在你的应用程序中做一些关于如何引用静态内容的技巧。这特定于您自己的实现,请参阅Rob Allen提供的实现链接。

答案 2 :(得分:0)

修改

使用您的配置,您需要更改为以下内容:

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

执行此操作后,您可以将公共内容移动到文档根目录,它应该可以正常工作。

请勿忘记/忽略非公共目录中.htaccess个文件的部分。

那说使用我所描述的惯例真的会更好。坦率地说,如果您的主机不允许您在文档根id切换主机之外创建文件。


通常,惯例是public文件夹 文档根目录,而所有其他文件夹都在文档根目录之外。因此http://billingsystem.com应通过虚拟主机或默认主机配置映射到path/to/project/public。在文档根目录中包含所有内容并不是一个好主意。如果您确实将所有内容放在文档根目录中,因为您没有访问它,那么您需要更改配置:

index.php中的

APPLICATION_PATH应为realpath(dirname(__FILE__).'/application');

然后,您要确保删除.htaccesslibraryapplication拒绝所有网络访问权限的tests

答案 3 :(得分:0)

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

只需将此路径更改为

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

并将index.php和.htaccess文件移动到根文件夹中。