selective/basepath

Slim 4 的 URL 基路径检测器

2.2.0 2023-09-09 13:01 UTC

This package is auto-updated.

Last update: 2024-09-09 15:56:11 UTC


README

Slim 4 的 URL 基路径检测器。

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

功能

  • 支持 Apache 和 PHP 内置的 web 服务器
  • 已测试
  • 无依赖
  • 非常快

支持的服务器

  • 具有 mod_rewrite 和 .htaccess 的 Apache web 服务器
  • PHP 内置的 web 服务器

要求

  • PHP 7.2+ 或 8.1+

安装

composer require selective/basepath

推荐的 目录结构

  • public/ Web 服务器文件,DocumentRoot
    • .htaccess Apache 前端控制器的重定向规则
    • index.php 前端控制器
  • .htaccess 内部重定向到 public/ 目录

以下步骤对于您的 Slim 4 应用程序是必要的

对于 Apache,我们必须将网络流量“重定向”到 public/index.php 中的前端控制器。

创建一个文件:public/.htaccess,内容如下

# Redirect to front controller
RewriteEngine On
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

我们还需要一个规则将子目录“重定向”到 public/index.php 中的前端控制器。

public/ 目录上方创建第二个 .htaccess 文件,内容如下

RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

用法

Slim 4 集成

addRoutingMiddleware() 之后添加 BasePathMiddleware 以在路由开始之前设置 basePath。

示例:public/index.php

<?php

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Selective\BasePath\BasePathMiddleware;
use Slim\Factory\AppFactory;

require_once __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

// Add Slim routing middleware
$app->addRoutingMiddleware();

// Set the base path to run the app in a subdirectory.
// This path is used in urlFor().
$app->add(new BasePathMiddleware($app));

$app->addErrorMiddleware(true, true, true);

// Define app routes
$app->get('/', function (Request $request, Response $response) {
    $response->getBody()->write('Hello, World!');
    return $response;
})->setName('root');

// Run app
$app->run();

Apache 用法

  • 启动 Apache web 服务器
  • 打开您的网站,例如 http://localhosthttp://localhost/{my-sub-directory},您应该看到消息 Hello, World!

PHP 内置的 web 服务器用法

  • 打开控制台,切换到项目 public/ 目录。然后运行
php -S localhost:8000

如果您不是从项目 public/ 目录启动 web 服务器,您需要使用特定的文档根目录启动它

php -S localhost:8000 -t public
  • 打开 http://localhost:8000,您应该看到消息 Hello, World!

好的 URL

public/ 目录只是您的 web 服务器的 DocumentRoot,但它永远不会是您的基路径和官方 URL 的一部分。

好的 URL

  • https://www.example.com
  • https://www.example.com/users
  • https://www.example.com/my-app
  • https://www.example.com/my-app/users

坏的 URL

  • https://www.example.com/public
  • https://www.example.com/public/users
  • https://www.example.com/my-app/public
  • https://www.example.com/my-app/public/users

检索基路径

$basePath = \Slim\Routing\RouteContext::fromRequest($request)->getBasePath();

使用基路径创建相对 URL

$routeParser = \Slim\Routing\RouteContext::fromRequest($request)->getRouteParser();
$url = $routeParser->urlFor('root');

将基路径渲染到 Twig 布局模板中

此示例需要 slim/twig-view

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <base href="{{ base_path() }}/"/>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

支持

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件