Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
RequestPath
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace PeServer\Core\Http;
6
7use PeServer\Core\Text;
8use PeServer\Core\Web\IUrlHelper;
9
10/**
11 * 要求パス。
12 */
13readonly class RequestPath
14{
15    #region variable
16
17    /**
18     * フルパス。
19     *
20     * @var string
21     */
22    public string $full;
23    /**
24     * / で分割されたパス一覧。
25     *
26     * @var string[]
27     * @phpstan-var list<string>
28     */
29    public array $tree;
30
31    #endregion
32
33    public function __construct(string $requestUri, private IUrlHelper $urlHelper)
34    {
35        $request = $requestUri;
36        if (!Text::isNullOrWhiteSpace($this->urlHelper->getBasePath())) {
37            //TODO: リバースプロキシとかの場合, form のアクション、各リソースへのパスの書き換え未考慮 必要に迫られたら考える
38        }
39
40        $requestItems = Text::split($request, '?', 2);
41
42        $this->full = Text::trim($requestItems[0], '/');
43        $this->tree = Text::split($this->full, '/');
44    }
45}