【问题标题】:Lithium PHP routes not working锂 PHP 路由不起作用
【发布时间】:2013-03-29 00:18:39
【问题描述】:

我正在关注锂的快速入门指南:http://li3.me/docs/manual/quickstart

我在 /var/www/my_app/app/models/Posts.php 中创建了我的帖子模型

<?php

namespace app\models;

class Posts extends \lithium\data\Model {
}

?>

我在 /var/www/my_app/app/controllers/PostsController.php 中创建了我的帖子控制器

<?php

namespace app\controllers;

class PostsController extends \lithium\action\Controller {

    public function index() {
            return array('foo' => 'bar', 'title' => 'Posts');
    }
}

?>

我在 /var/www/my_app/app/views/posts/index.html.php 中创建了我的视图

Lithium is less dense than <?=$foo;?>ium.

然后快速入门指南说我应该能够通过转到

查看我的帖子索引页面
http://localhost/my_app/posts

但我得到了一个

Not Found

The requested URL /my_app/posts was not found on this server.

但是,如果我只是去

http://localhost/my_app 

会显示 Lithium 自带的默认主页。

所以我尝试通过将此行添加到我的 /var/www/my_app/config/routes.php 文件来解决问题:

Router::connect('/posts', 'Posts::index');

但我得到同样的 Not Found 错误?

【问题讨论】:

    标签: php routes lithium


    【解决方案1】:

    您需要确保在您的 Apache 中安装了mod_rewrite并启用

    还要检查.htaccess 文件是否存在并且allow_override 已为虚拟主机正确设置,否则.htaccess 文件将被忽略。

    有关详细信息,请查看文档中的 troubleshooting 部分

    【讨论】:

    • 我运行了这个命令来启用 mod_rewrite: "sudo a2enmod rewrite" 我修改了 "/etc/apache2/sites-available/default" 并将 AllowOverride 设置为 "All"。
    • 啊!不敢相信我忘了检查我的虚拟主机指令。谢谢提醒,成功了! :)
    【解决方案2】:

    Routing documentation中稍微深入一点,Router::connect()方法的参数解释的比较全。 :: 后面的部分应该是路由调用的动作的名称;在你的情况下index(或者可能什么都没有,如果 indexAction 有默认设置;不熟悉锂)。您可以通过从 Controller 的方法名称中删除后缀 Action 来派生“名称”。我建议更全面地探索路由文档,以免将来让自己头疼。

    【讨论】:

    • 好的,现在更有意义了。我将路由更改为 Router::connect('/posts', 'Posts::index');但我仍然收到相同的 Not Found 错误。
    • 您确定mod_rewrite 已安装并启用吗?您的.htaccess 文件是否存在并且allow_override 设置是否正确?查看troubleshooting上的部分
    • @thaJeztah 是的 mod_rewrite 是问题,你想把它写成答案,这样我就可以选择它了。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2019-11-03
    • 1970-01-01
    • 2017-02-24
    • 2016-07-27
    相关资源
    最近更新 更多