Model view controller Zend框架默认MVC实现
我已经使用Zend框架一段时间了。在阅读了大量的文档之后,我想知道为什么所有的示例都没有提到它 如果我是对的,MVC设计模式倾向于使用单个入口点与应用程序交互。使用Zend,它将在公用文件夹中创建index.php文件 我尝试使用Zend提供的默认(v1.09).htaccess使用这种方式:Model view controller Zend框架默认MVC实现,model-view-controller,zend-framework,Model View Controller,Zend Framework,我已经使用Zend框架一段时间了。在阅读了大量的文档之后,我想知道为什么所有的示例都没有提到它 如果我是对的,MVC设计模式倾向于使用单个入口点与应用程序交互。使用Zend,它将在公用文件夹中创建index.php文件 我尝试使用Zend提供的默认(v1.09).htaccess使用这种方式: RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_
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();
但到目前为止,我无法使用单一入口点,我必须复制索引文件并为其提供相关控制器的名称。通过这种方式,我没有得到500服务器错误,而是能够正常加载页面
所以,我的问题是:在让我的应用程序正常工作的过程中,我犯了什么错误?这是正常的做事方式吗
谢谢
编辑@13h55
我已经重新配置了我的服务器,以便通过虚拟主机而不是别名访问zend安装,这似乎就是错误所在
我用了一个别名,看起来像:
Alias /elul/ "c:\wamp\www\elul\trunk\elul\public/"
<Directory "c:\wamp\www\elul\trunk\elul\public/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot "C:\wamp\www\examen_fle\trunk\examen_fle\public"
ServerName examen.elul.local
ErrorLog "logs/your_own-error.log"
CustomLog "logs/your_own-access.log" common
<directory "C:\wamp\www\examen_fle\trunk\examen_fle\public">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</directory>
</VirtualHost>
如果您更喜欢使用别名而不是虚拟主机,则可能需要使用
RewriteBase
,或者可以将基本url预先发送到frontcontroller:
RewriteBase /elul/
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
或
也应该工作。。。不过我还是用这个:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /project_name/index.php
这是一个更简单的规则,但我不确定它是否真的会影响性能或涵盖所有可能性。如果您更喜欢使用别名而不是虚拟主机,您可能需要使用
RewriteBase
,或者您可以将基本url预先发送到frontcontroller:
RewriteBase /elul/
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
或
也应该工作。。。不过我还是用这个:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /project_name/index.php
这是一个更简单的规则,但我不确定它是否真的会影响性能或涵盖所有可能性。这可能很简单,因为您的http服务器没有解析.htaccess文件。
AllowOverride
Apache设置是否正确?您的mod\u rewrite
设置是否正确a2enmod rewrite
以启用它+apache重新启动。到目前为止,mod_rewrite正在工作(如果禁用它,我会收到一个找不到的错误),如果有一个别名指向我的公用文件夹。我将在虚拟主机上尝试此操作,以查看它是否有任何更改。这可能很简单,因为您的http服务器没有解析.htaccess文件。AllowOverride
Apache设置是否正确?您的mod\u rewrite
设置是否正确a2enmod rewrite
以启用它+apache重新启动。到目前为止,mod_rewrite正在工作(如果禁用它,我会收到一个找不到的错误),如果有一个别名指向我的公用文件夹。我将在虚拟主机上尝试此操作,看看是否有任何更改。谢谢,因为我启用了虚拟主机,所以我将继续使用我的新配置,但如果我必须配置一个新项目,我肯定会尝试一下你的解决方案。我只需要在一个新服务器上安装我的web应用程序,该服务器使用alias将URL重定向到它们的最终位置,你的解决方案工作得很好(我使用了第一个)谢谢,因为我启用了虚拟主机,所以我将坚持使用我的新配置,但如果我必须配置一个新项目,我肯定会尝试一下你的解决方案。我只需要在一个新服务器上安装我的web应用程序,该服务器使用alias将URL重定向到它们的最终位置,而你的解决方案工作得很好(我使用了第一个)