Zend 索引控制器问题

Posted

技术标签:

【中文标题】Zend 索引控制器问题【英文标题】:Zend index controller problem 【发布时间】:2011-08-24 15:44:18 【问题描述】:

我正在尝试使用 Zend 框架创建应用程序,所以 我已经使用 zf 工具创建了基本的应用程序结构。

现在,当我尝试使用 http://localhost/zendApp/public/index.php 启动应用程序时 默认的“欢迎使用 Zend 框架!”页面加载。

但是当我输入 http://localhost/zendApp/public/http://localhost/zendApp/public/index 索引控制器没有被调用,但是 而是我收到错误消息:

*指定的控制器无效(zendApp)

array (
  'controller' => 'zendApp',
  'action' => 'public',
  'module' => 'default',
)

如您所见,它正在尝试使用应用程序名称启动控制器。 此外,如果我在索引控制器中创建其他操作并使用 http://localhost/zendApp/public/index/newaction 调用它 我得到同样的错误:

数组 ( '控制器' => 'zendApp', '行动' => '公共', '索引' => '新动作', '模块' => '默认', )

你能帮我理解为什么没有调用索引控制器吗? 谢谢。

【问题讨论】:

【参考方案1】:

您的控制器的 url 不包括公用文件夹。例如 UserController 将是 http://localhost/zendApp/user/ 不是 http://localhost/zendApp/public/user,您的索引控制器应该在 http://localhost/zendApp/ 或 http://localhost/zendApp/index 上工作。

您的 url rewiter(例如 mod_rewrite)应该设置为将所有 url 重写为 /public/index.php,而不是静态文件,例如图像、css js 等。请参阅here

您是否有此设置: “如果您要部署到“用户”站点(例如 http://localhost/~rob),那么您需要在 .htaccess 文件中添加一个类似于:RewriteBase /~rob/zf-tutorial/public/ 的 RewriteBase 行,来自 here

【讨论】:

感谢您的回答,我明白您的意思。但我认为 zend 的默认设置是完全通过公用文件夹访问控制器 - 开发人员猜测,在 Web 服务器上部署时,您只会将 index.php 放在公用文件夹中,而将应用程序的其余部分放在公用文件夹之外。但这在我本地开发时并不可靠,所以我会使用你所说的。 当我阅读文章 bogartcomputing.com/web-programming-answers/213/… 时,我首先找到了解决问题的方法。看来我错过了这个:“行 C:\xampp\php\php.ini, uncomment extension=php_pdo.dll extension=php_pdo_sqlite.dll” 非常确定 Zend 的默认结构是将控制器放在应用程序文件夹中,在 public 之外,public 仅用于资产和设置环境并调用引导程序的 index.php。 framework.zend.com/manual/1.11/en/…

以上是关于Zend 索引控制器问题的主要内容,如果未能解决你的问题,请参考以下文章

Zend 框架,视图

如何在 Zend/MVC 的视图文件中包含 PHP 文件?

设置 zend 框架动作控制器

在 Zend 中如何实现复合视图?

Zend 框架中的嵌套控制器

在每个控制器中使用 Zend 函数