selective / basepath
Slim 4 的 URL 基路径检测器
2.2.0
2023-09-09 13:01 UTC
Requires
- php: ^8.1
- psr/http-server-middleware: ^1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3
- phpstan/phpstan: ^1
- phpunit/phpunit: ^10
- slim/psr7: ^1
- slim/slim: ^4
- squizlabs/php_codesniffer: ^3
README
Slim 4 的 URL 基路径检测器。
功能
- 支持 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://localhost
或http://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>
支持
- 问题:https://github.com/selective-php/basepath/issues
- 您可以在此 捐赠 给此项目。
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。