PHP code example of maksi / laravel-request-mapper
1. Go to this page and download the library: Download maksi/laravel-request-mapper library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
maksi / laravel-request-mapper example snippets
declare(strict_types = 1);
use Maksi\LaravelRequestMapper\Filling\RequestData\AllRequestData;
final class RoomSearchRequestData extends AllRequestData
{
private $name;
protected function init(array $data): void
{
$this->name = $data['name'] ?? null;
}
public function getName(): string
{
return $this->name;
}
}
declare(strict_types = 1);
/**
* @package App\Http\Controller
*/
class RoomSearchController
{
...
public function __invoke(RoomSearchRequestData $payload) // DTO object injected
{
}
}
declare(strict_types = 1);
namespace Maksi\LaravelRequestMapper\Tests\Integration\LaravelNestedValidation\Stub;
use Maksi\LaravelRequestMapper\Validation\BeforeType\Laravel\AbstractValidationRule;
class ValidatorRule extends AbstractValidationRule
{
public function rules(): array
{
return [
'nested' => 'array|
declare(strict_types = 1);
namespace Maksi\LaravelRequestMapper\Tests\Integration\LaravelNestedValidation\Stub;
use Maksi\LaravelRequestMapper\Filling\RequestData\JsonRequestData;
use Maksi\LaravelRequestMapper\Validation\BeforeType\Laravel\Annotation\ValidationClass;
/**
* @ValidationClass(class="\Maksi\LaravelRequestMapper\Tests\Integration\LaravelNestedValidation\Stub\ValidatorRule")
*/
class RootRequestDataStub extends JsonRequestData
{
private $title;
private $nested;
protected function init(array $data): void
{
$this->title = $data['title'] ?? null;
$this->nested = new NestedRequestDataStub($data['nested'] ?? []);
}
public function getTitle(): string
{
return $this->title;
}
public function getNested(): NestedRequestDataStub
{
return $this->nested;
}
}
declare(strict_types = 1);
namespace Maksi\LaravelRequestMapper\Tests\Integration\AnnotationValidation\Stub;
use Maksi\LaravelRequestMapper\Filling\RequestData\AllRequestData;
use Maksi\LaravelRequestMapper\Validation\Annotation\Type;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Type(type="annotation")
*/
class AllRequestDataStub extends AllRequestData
{
/**
* @Assert\Type(type="int")
* @Assert\NotBlank()
*/
private $allAge;
/**
* @var string
* @Assert\NotBlank()
*/
private $allTitle;
protected function init(array $data): void
{
$this->allAge = $data['age'] ?? null;
$this->allTitle = $data['title'] ?? null;
}
public function getAllTitle(): string
{
return $this->allTitle;
}
public function getAllAge(): int
{
return $this->allAge;
}
}
declare(strict_types = 1);
namespace Maksi\LaravelRequestMapper\Tests\Integration\AnnotationNestedValidation\Stub;
use Maksi\LaravelRequestMapper\Filling\RequestData\JsonRequestData;
use Maksi\LaravelRequestMapper\Validation\Annotation\Type;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Type(type="annotation")
*/
class RootRequestDataStub extends JsonRequestData
{
/**
* @Assert\NotBlank()
* @Assert\Type(type="string")
*/
private $title;
/**
* @Assert\Valid()
*/
private $nested; // this property should have `Valid` annotation for validate nested object
protected function init(array $data): void
{
$this->title = $data['title'] ?? null;
$this->nested = new NestedRequestDataStub($data['nested'] ?? []);
}
public function getTitle(): string
{
return $this->title;
}
public function getNested(): NestedRequestDataStub
{
return $this->nested;
}
}
declare(strict_types = 1);
namespace Maksi\LaravelRequestMapper\Tests\Integration\AnnotationNestedValidation\Stub;
use Maksi\LaravelRequestMapper\Filling\RequestData\JsonRequestData;
use Symfony\Component\Validator\Constraints as Assert;
class NestedRequestDataStub extends JsonRequestData
{
/**
* @Assert\NotBlank()
* @Assert\Type(type="string")
*/
private $nestedTitle;
protected function init(array $data): void
{
$this->nestedTitle = $data['title'] ?? null;
}
public function getTitle(): string
{
return $this->nestedTitle;
}
}
use Maksi\LaravelRequestMapper\Validation\BeforeType\Laravel\AbstractValidationRule;
class ValidatorRule extends AbstractValidationRule
{
/**
* @return array
*/
public function rules(): array
{
return [
'nested' => 'array|
declare(strict_types = 1);
namespace App\Http\RequestDataStrategy;
use App\Http\RequestData\TeacherSearchRequestData;
use Illuminate\Http\Request;
use Maksi\LaravelRequestMapper\Filling\Strategies\StrategyInterface;
use Maksi\LaravelRequestMapper\Filling\RequestData\RequestData;
class TeacherSearchStrategy implements StrategyInterface
{
public function resolve(Request $request): array
{
return $request->all();
}
public function support(Request $request, RequestData $object): bool
{
return $object instanceof TeacherSearchRequestData
&& $request->routeIs('teacher-search');
}
}
declare(strict_types = 1);
namespace App\Http\RequestData;
use Maksi\LaravelRequestMapper\Filling\RequestData\RequestData;
use Symfony\Component\Validator\Constraints as Assert;
final class TeacherSearchRequestData extends RequestData
{
/**
* @var string
*
* @Assert\NotBlank()
* @Assert\Type(type="string")
*/
private $name;
protected function init(array $data): void
{
$this->name = $data['name'] ?? null;
}
public function getName(): string
{
return $this->name;
}
}
declare(strict_types = 1);
namespace App\Http\Provider;
use App\Http\RequestDataStrategy\TeacherSearchStrategy;
use Illuminate\Support\ServiceProvider;
use Maksi\LaravelRequestMapper\FillingChainProcessor;
/**
* Class RequestMapperProvider
*
* @package App\Http\Provider
*/
class RequestMapperProvider extends ServiceProvider
{
/**
* @param FillingChainProcessor $fillingChainProcessor
*/
public function boot(FillingChainProcessor $fillingChainProcessor): void
{
$fillingChainProcessor->addStrategy($this->app->make(TeacherSearchStrategy::class));
}
}
class StringException extends \Maksi\LaravelRequestMapper\Validation\ResponseException\AbstractException
implements \Illuminate\Contracts\Support\Responsable
{
/**
* Create an HTTP response that represents the object.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\JsonResponse
*/
public function toResponse($request)
{
return \Illuminate\Http\JsonResponse::create('Invalid data provided')
->setStatusCode(\Illuminate\Http\Response::HTTP_UNPROCESSABLE_ENTITY);
}
}