guidofaecke / blast-base-url
PSR-7 中间件和助手,用于处理基本 URL。
Requires
- php: ~8.2.0|~8.3.0
- psr/http-message: ^1.0|^2.0
- psr/http-server-handler: ^1.0|^2.0
- psr/http-server-middleware: ^1.0|^2.0
Requires (Dev)
- doctrine/coding-standard: ^9.0
- laminas/laminas-diactoros: ^2.6.0
- laminas/laminas-servicemanager: ^3.7.0
- mezzio/mezzio-helpers: ^5.6.0
- mezzio/mezzio-laminasviewrenderer: ^2.3.0
- mezzio/mezzio-twigrenderer: ^2.14
- phly/keep-a-changelog: ^2.12
- phpcompatibility/php-compatibility: ^9.3
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.0
- slevomat/coding-standard: ^7.0
- squizlabs/php_codesniffer: ^3.6
- vimeo/psalm: ^4.9
This package is auto-updated.
Last update: 2024-09-11 23:13:45 UTC
README
这只是 mtymek/blast-base-url 的另一个分支...并不完全是这样!mtymek/blast-base-url 的发展似乎在 2019 年停止了,所以这里是我们的做法,去掉冗余,回归 PHP7.4 - 8.1
该软件包检测 Web 应用的基本 URL。当您需要应用程序从子目录(如 https:///my-project/public
)提供服务时,这很有用。这在某些情况下可能很有用,尤其是在开发环境中。
该软件包还提供了处理资源的助手。
检测逻辑基于 laminas-http
软件包。
安装
支持使用 Composer 进行安装
$ composer require guidofaecke/blast-base-url
如果存在 Zend Component Installer
,它将自动更新应用程序配置。
用法
为了简单起见,以下说明针对基于 Mezzio 模板 的应用程序,假设已选择 laminas/laminas-servicemanager
作为 DI 容器。
Blast\BaseUrl
基于 PSR-7,因此它将很好地与其他框架/分发器(如 Slim3 或 Relay)一起工作,只是连接过程将有所不同。
基本 URL 中间件
将 BaseUrlMiddleware
添加到您的管道中,在路由中间件之前(config/pipeline.php
文件)
// ... $app->pipe(\Blast\BaseUrl\BaseUrlMiddleware::class); // ... $app->pipe(RouteMiddleware::class);
BaseUrlMiddleware
将更改请求 URI 中的路径,删除基本 URL。这意味着即使您从 http:/localhost/~user/project/public/index.php/foo/bar
访问您的项目,管道中的下一个中间件也将路径视为 /foo/bar
。
此外,将添加两个属性到 ServerRequest,分别包含基本 URL 和基本路径
echo $request->getAttribute(BaseUrlMiddleware::BASE_URL); // outputs: /some/subdirectory/index.php echo $request->getAttribute(BaseUrlMiddleware::BASE_PATH); // outputs: /some/subdirectory/
生成 URL
BaseUrlMiddleware
可以自动配置 UrlHelper
,以便所有由该助手生成的 URL 都具有适当的前缀。如果服务容器中存在 UrlHelper
,则将自动执行此操作。
访问资产 - 基本路径
该软件包提供的另一个功能是基本路径助手。它可以用来生成在子目录下正确工作的资产文件的 URL。
如果存在 BasePathHelper
,则 BaseUrlMiddleware
将在执行期间自动配置它。
Zend 视图
您可以在 zend-view
模板中使用以下语法
<link rel="stylesheet" href="<?= $this->basePath('/css/style.css') ?>" />
根据您的应用程序目录,它将产生类似的结果
<link rel="stylesheet" href="/public_html/my-project/public/css/style.css" />
Twig
您可以在 twig
模板中使用以下语法
<link rel="stylesheet" href="{{ basePath('/css/style.css') }}" />
根据您的应用程序目录,它将产生类似的结果
<link rel="stylesheet" href="/public_html/my-project/public/css/style.css" />