当前位置: 首页 > 面试题库 >

PHP框架中的漂亮URL

裴成文
2023-03-14
问题内容

我知道您可以在htaccess中添加规则,但是我看到PHP框架无法做到这一点,并且您仍然拥有漂亮的URL。如果服务器不知道URL规则,他们该怎么做?

我一直在寻找Yii的
网址管理器类,但我不知道它是如何做到的。


问题答案:

通常,通过使用以下规则将所有请求路由到单个入口点(根据该请求执行不同代码的文件)来完成:

# Redirect everything that doesn't match a directory or file to index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]

然后,该文件将请求($_SERVER["REQUEST_URI"])与路由列表进行比较-
匹配请求的模式到控制器动作(在MVC应用程序中)或其他执行路径的映射。框架通常包含一条路由,该路由可以从请求本身推断出控制器和操作,作为备用路由。

一个小的简化示例:

<?php

// Define a couple of simple actions
class Home {
    public function GET() { return 'Homepage'; }
}

class About {
    public function GET() { return 'About page'; }
}

// Mapping of request pattern (URL) to action classes (above)
$routes = array(
    '/' => 'Home',
    '/about' => 'About'
);

// Match the request to a route (find the first matching URL in routes)
$request = '/' . trim($_SERVER['REQUEST_URI'], '/');
$route = null;
foreach ($routes as $pattern => $class) {
    if ($pattern == $request) {
        $route = $class;
        break;
    }
}

// If no route matched, or class for route not found (404)
if (is_null($route) || !class_exists($route)) {
    header('HTTP/1.1 404 Not Found');
    echo 'Page not found';
    exit(1);
}

// If method not found in action class, send a 405 (e.g. Home::POST())
if (!method_exists($route, $_SERVER["REQUEST_METHOD"])) {
    header('HTTP/1.1 405 Method not allowed');
    echo 'Method not allowed';
    exit(1);
}

// Otherwise, return the result of the action
$action = new $route;
$result = call_user_func(array($action, $_SERVER["REQUEST_METHOD"]));
echo $result;

与第一个配置结合使用,这是一个简单的脚本,可让您使用像这样的URL domain.com/about。希望这可以帮助您了解这里发生的事情。



 类似资料:
  • 问题内容: 我正在创建一个JSON文件的脚本。现在,我只是使用(PHP 5.2.x)将数组编码为JSON输出。然后,我将返回值打印到文件中并保存。问题是客户端希望能够打开这些JSON文件以提高可读性,因此我想在其中添加换行符并“漂亮打印” JSON输出。有关如何执行此操作的任何想法?我唯一可以看到的替代方法是完全不使用,而只是手动写入文件内容,并为每行添加自己的换行符。 这是我得到的: 这就是我想

  • 问题内容: 我正在构建一个PHP脚本,该脚本将JSON数据提供给另一个脚本。我的脚本将数据构建到一个大的关联数组中,然后使用来输出数据。这是一个示例脚本: 上面的代码产生以下输出: 如果您的数据量很少,那就太好了,但是我希望遵循以下几点: 有没有办法在PHP中做到这一点而又没有丑陋的破解?似乎有人在Facebook上找到了答案。 问题答案: PHP 5.4提供了用于调用的选项。 http://ph

  • 在JFreeChart中可以为饼图提供复杂、美丽的颜色吗?我的意思是如何实现像链接中显示的图像那样的颜色? 是否可以使用RGB格式,还是需要使用不同的格式?我们怎么做。谢谢你的帮助

  • 问题内容: 我使用PHP中的DOM扩展来构建一些HTML文档,并且我希望输出的格式正确(带有新行和缩进),以便从我做过的许多测试中都可以读取: “ formatOutput = true”对saveHTML()完全不起作用,仅对saveXML()起作用 即使我使用saveXML(),它也仅适用于通过DOM创建的元素,而不适用于loadHTML()包含的元素,即使使用“ preserveWhiteS

  • 问题内容: 以下是代码: 如果我在浏览器中打印它,我不会得到很好的XML结构,例如 我刚得到 我想成为utf-8这怎么可能? 问题答案: 您可以尝试这样做: 您还可以在创建之后立即设置这些参数: 这可能更简洁。两种情况下的输出均为(Demo): 我不知道如何使用来更改缩进字符。您可以使用逐行正则表达式替换(例如,使用)对XML进行后处理: 另外,还有一个整洁的扩展程序,它也可以漂亮地打印XML数据

  • 问题内容: 我知道以下用于在SWT / Eclipse RCP应用程序中绘制图表的库: Eclipse BIRT Chart Engine(有关如何使用它的文章的链接) JFreeChart 还有哪些其他库可以用SWT绘制漂亮的图表?还是Java中的图表?毕竟,您始终可以显示图像… 问题答案: 我没有使用BIRT或JGraph,但是我在SWT应用程序中使用了JFreeChart。我发现在SWT中使