在此服务器上找不到请求的 URL /read


The requested URL /read was not found on this server

我是 php 的新手。所以一个人建议我逐步执行本教程 - http://symfony.com/doc/current/book/from_flat_php_to_symfony2.html(在"添加一丝 Symfony"一章之前)。对乞丐来说很好!我创建了我的第一个博客!但是当我尝试获取"显示"页面时,该页面显示由id查询参数标识的单个博客文章,我的浏览器说:"在此服务器上找不到请求的URL/read。我不使用 .htaccess 和 apache 的重写模式(服务器版本 - Apache/2.2.22)已启用。我的代码 ia 下一个:

前端控制器

<?php
// index.php
// load and initialize any global libraries
require_once 'model.php';
require_once 'controllers.php';
// route the request internally
$uri = $_SERVER['REQUEST_URI'];
if ('/index.php' == $uri) {
    list_action();
} elseif ('/index.php/show' == $uri && isset($_GET['id'])) {
    show_action($_GET['id']);
} else {
    header('Status: 404 Not Found');
    echo '<html><body><h1>Page Not Found</h1></body></html>';
}

控制器.php

function list_action()
{
    $posts = get_all_posts();
    require 'templates/list.php';
}
function show_action($id)
{
    $post = get_post_by_id($id);
    require 'templates/show.php';
}

<?php
// model.php
function open_database_connection()
{
    $link = mysql_connect('localhost', 'root', 'zoob');
    mysql_select_db('post', $link);
    return $link;
}
function close_database_connection($link)
{
    mysql_close($link);
}
function get_all_posts()
{
    $link = open_database_connection();
    $result = mysql_query('SELECT id, title FROM post', $link);
    $posts = array();
    while ($row = mysql_fetch_assoc($result)) {
        $posts[] = $row;
    }
    close_database_connection($link);
    return $posts;
}
function get_post_by_id($id)
{
    $link = open_database_connection();
    $id = intval($id);
    $query = 'SELECT date, title, post FROM post WHERE id = '.$id;
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    close_database_connection($link);
    return $row;
}

模板

//layout.php
<!DOCTYPE html>
<html>
<head>
    <title><?php echo $title ?></title>
</head>
<body>
<?php echo $content ?>
</body>
</html>
//list.php
<?php $title = 'List of Posts' ?>
<?php ob_start() ?>
<h1>List of Posts</h1>
<ul>
    <?php foreach ($posts as $post): ?>
        <li>
            <a href="/read?id=<?php echo $post['id'] ?>">
                <?php echo $post['title'] ?>
            </a>
        </li>
    <?php endforeach ?>
</ul>
<?php $content = ob_get_clean() ?>
<?php include 'layout.php' ?>
//show.php
<?php
$title = $post['title'] ?>
<?php ob_start() ?>
    <h1><?php echo $post['title'] ?></h1>
    <div class="date"><?php echo $post['date'] ?></div>
    <div class="body">
        <?php echo $post['body'] ?>
    </div>
<?php $content = ob_get_clean() ?>
<?php include 'layout.php' ?>

请帮助我解决和理解问题。谢谢

您的路线及其引用方式不匹配。

  • 在列表中.php您指的是/read?id=
  • 在索引中.php您定义了/show?id=

改变两者中的任何一个,你应该很高兴。

好吧,现在控制器实际上得到了请求,你只需要调试 URI 和 GET 请求,以确保它们符合你的要求。在前端控制器中执行类似操作:

<?php
// index.php
// load and initialize any global libraries
require_once 'model.php';
require_once 'controllers.php';
// route the request internally
$uri = $_SERVER['REQUEST_URI'];
if ('/index.php' == $uri) {
    list_action();
} elseif ('/index.php/show' == $uri && isset($_GET['id'])) {
    show_action($_GET['id']);
} else {
    header('Status: 404 Not Found');
    echo '<html><body><h1>Page Not Found</h1></body></html>';
    var_dump($uri);
    var_dump($_GET);
}