phpsoftbox / request
Request component for the PhpSoftBox framework
dev-master
2026-06-03 11:17 UTC
Requires
- php: ^8.4
- phpsoftbox/validator: dev-master
- psr/http-message: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpsoftbox/cli-app: dev-master
- phpsoftbox/cs-fixer: ^1.1.0
- phpsoftbox/http-message: dev-master
- phpunit/phpunit: ^11.2
This package is auto-updated.
Last update: 2026-06-03 11:18:38 UTC
README
About
phpsoftbox/request — тонкая оболочка над PSR‑7 запросом с удобными методами доступа к данным и встроенной валидацией через phpsoftbox/validator.
Ключевые возможности:
- единый доступ к query/body/cookies/files/attributes;
- валидация через
Request::validate(),RequestSchemaиApiSchema; - доступ к оригинальному PSR‑7 запросу через
psr().
Quick Start
use PhpSoftBox\Request\Request; use PhpSoftBox\Validator\Validator; $request = new Request($psrRequest, new Validator()); $data = $request->validate([ 'email' => [ new \PhpSoftBox\Validator\Rule\PresentValidation(), new \PhpSoftBox\Validator\Rule\FilledValidation(), (new \PhpSoftBox\Validator\Rule\StringValidation())->email(), ], ]);
RequestSchema
Если удобнее держать правила в классе:
use PhpSoftBox\Request\RequestSchema; use PhpSoftBox\Validator\Rule\FilledValidation; use PhpSoftBox\Validator\Rule\PresentValidation; use PhpSoftBox\Validator\Rule\StringValidation; final class LoginRequest extends RequestSchema { public function rules(): array { return [ 'login' => [new PresentValidation(), new FilledValidation(), new StringValidation()], 'password' => [new PresentValidation(), new FilledValidation(), new StringValidation()], ]; } }
Далее в контроллере:
$schema = new LoginRequest($request); $data = $schema->validate();
ApiSchema
Для валидации входящих payload без HTTP-request:
use PhpSoftBox\Request\ApiSchema; final class MarketplaceCardSchema extends ApiSchema { public function rules(): array { return [ 'id' => [new \PhpSoftBox\Validator\Rule\PresentValidation(), new \PhpSoftBox\Validator\Rule\IntValidation()], ]; } } $schema = new MarketplaceCardSchema($payload); $data = $schema->validate();
Schema Definition
RequestSchema и ApiSchema поддерживают композицию правил через InputSchemaDefinition.
Схему можно расширять, заменять или сужать перед валидацией:
use PhpSoftBox\Request\InputSchemaDefinition; $schema = (new TaskTransitionRequest($request)) ->merge(InputSchemaDefinition::make( rules: ['acceptance_data.driver_name' => [new StringValidation()->nullable()]], filters: ['acceptance_data.driver_name' => [new TrimFilter(), new NullIfEmptyFilter()]], )) ->only(['acceptance_data.driver_name']); $data = $schema->validate();
Для переиспользуемых частей схемы можно реализовать InputSchemaPartInterface.