guidofaecke / blast-base-url
PSR-7 middleware and helpers for working with base 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-10-11 23:23:23 UTC
README
Just another fork of mtymek/blast-base-url... Not exactly! The development of mtymek/blast-base-url apparently stopped in 2019, so here we go, strip the cruft and get back to PHP7.4 - 8.1
This package detects base URL of web application. It is useful when you need your app
to be served from subdirectory (like http://localhost/my-project/public
). This can
be useful sometimes, especially in development environment.
View helpers for working with assets are also provided in the package.
Detection logic is based on laminas-http
package.
Installation
Installation is supported using Composer:
$ composer require guidofaecke/blast-base-url
If Zend Component Installer
is present, it will automatically update application configuration.
Usage
For simplicity, following instructions are targeting applications based on
Mezzio Skeleton,
assuming that laminas/laminas-servicemanager
was selected as DI container.
Blast\BaseUrl
is based on PSR-7, so it will work well with other frameworks/dispatchers
like Slim3 or Relay, just that wiring process will look different.
Base URL Middleware
Add BaseUrlMiddleware
to your pipeline, just before routing middleware (config/pipeline.php
file):
// ... $app->pipe(\Blast\BaseUrl\BaseUrlMiddleware::class); // ... $app->pipe(RouteMiddleware::class);
BaseUrlMiddleware
will alter path from request URI, stripping base url. It means that
even if you access your project from http:/localhost/~user/project/public/index.php/foo/bar
,
next middleware in the pipe will see the path as /foo/bar
.
Additionally, two attributes will be added to ServerRequest, holding base URL and base path:
echo $request->getAttribute(BaseUrlMiddleware::BASE_URL); // outputs: /some/subdirectory/index.php echo $request->getAttribute(BaseUrlMiddleware::BASE_PATH); // outputs: /some/subdirectory/
Generating URLs
BaseUrlMiddleware
is able to automatically configure UrlHelper
, so that all URLs generated
by this helper will have appropriate prefix. This will be done automatically if UrlHelper
is available in service container.
Accessing assets - base path
Another feature provided by this package is base path helper. It can be used to generate URLS for your asset files that work correctly under subdirectory.
If BasePathHelper
is available, BaseUrlMiddleware
will automatically configure it during
execution.
Zend View
You will be able to use following syntax inside zend-view
templates:
<link rel="stylesheet" href="<?= $this->basePath('/css/style.css') ?>" />
Depending on your application directory, it will produce something similar to:
<link rel="stylesheet" href="/public_html/my-project/public/css/style.css" />
Twig
You will be able to use following syntax inside twig
templates:
<link rel="stylesheet" href="{{ basePath('/css/style.css') }}" />
Depending on your application directory, it will produce something similar to:
<link rel="stylesheet" href="/public_html/my-project/public/css/style.css" />