PHP code example of a7-tech / laminas-attribute-controller
1. Go to this page and download the library: Download a7-tech/laminas-attribute-controller 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/ */
a7-tech / laminas-attribute-controller example snippets
use LaminasAttributeController\AttributeActionController;
use LaminasAttributeController\Routing\Route;
#[Route('/user', name: 'user')]
final class UserController extends AttributeActionController
{
#[Route('/list', name: 'user_list', methods: ['GET'])]
public function listAction()
{
return ['users' => []];
}
#[Route('/add', name: 'user_add', methods: ['POST'])]
public function addAction()
{
return ['status' => 'success'];
}
}
use LaminasAttributeController\Routing\Route;
#[Route('/api/users', name: 'users_route', methods: ['GET', 'POST'])]
public function usersAction()
{
// Method implementation
}
use LaminasAttributeController\Validation\QueryParam;
use Symfony\Component\Validator\Constraints as Assert;
public function searchAction(
#[QueryParam('query', constraints: [new Assert\NotBlank(), new Assert\Length(min: 3)],
use LaminasAttributeController\Injection\Autowire;
use App\Service\UserService;
public function listAction(
#[Autowire] UserService $userService,
#[Autowire('custom.service.alias')] $customService
) {
$users = $userService->getAllUsers();
// Method implementation
}
use LaminasAttributeController\Security\IsGranted;
#[IsGranted('FULLY_AUTHENTICATED')]
public function authorizedAction()
{
// Only accessible to authenticated users
return ['message' => 'authorized area'];
}
use LaminasAttributeController\Validation\MapRequestPayload;
use App\DTO\UserCreateRequest;
public function createAction(
#[MapRequestPayload] UserCreateRequest $request
) {
// $request is populated from the request body
return ['id' => $this->userService->createUser($request)];
}
use Symfony\Component\Validator\Constraints as Assert;
use JMS\Serializer\Annotation as Serializer;
class UserCreateRequest
{
#[Assert\NotBlank(message: "Username is
public string $username;
#[Assert\NotBlank(message: "Email is racters")]
#[Assert\Regex(
pattern: "/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$/",
message: "Password must include at least one uppercase letter, one lowercase letter, and one number"
)]
public string $password;
#[Assert\NotBlank(message: "Age is
use LaminasAttributeController\Validation\MapQueryString;
use App\DTO\UserSearchRequest;
public function searchAction(
#[MapQueryString] UserSearchRequest $searchCriteria
) {
// $searchCriteria is populated from the query string parameters
return ['results' => $this->userService->search($searchCriteria)];
}
use Symfony\Component\Validator\Constraints as Assert;
use JMS\Serializer\Annotation as Serializer;
class UserSearchRequest
{
#[Assert\Length(min: 2, max: 50, minMessage: "Search term must be at least {{ limit }} characters")]
public ?string $searchTerm = null;
#[Assert\Range(
min: 1,
max: 100,
notInRangeMessage: "Results per page must be between {{ min }} and {{ max }}"
)]
public int $limit = 20;
#[Assert\PositiveOrZero(message: "Page number cannot be negative")]
public int $page = 0;
#[Assert\Choice(choices: ["asc", "desc"], message: "Sort direction must be either 'asc' or 'desc'")]
public string $sortDirection = "asc";
}
use LaminasAttributeController\Security\CurrentUser;
use App\Entity\User;
public function profileAction(
#[CurrentUser] User $user
) {
// $user contains the currently authenticated user
return ['user' => $user];
}
use LaminasAttributeController\ParameterResolverInterface;
use LaminasAttributeController\ResolutionContext;
final class MyCustomResolver implements ParameterResolverInterface
{
public function resolve(ResolutionContext $context): mixed
{
// Access parameter information
$parameter = $context->parameter;
// Access route match information
$routeMatch = $context->routeMatch;
// Access parameter attributes
$attributes = $context->getAttributes();
// Implement your custom resolution logic
// ...
// Return the resolved value
return $resolvedValue;
}
}
// In your module.config.php or any other configuration file
return [
'laminas-attribute-controller' => [
'resolvers' => [
// Default resolvers
FromRouteResolver::class,
MapRequestPayloadResolver::class,
MapQueryStringResolver::class,
QueryParamResolver::class,
AutowireResolver::class,
AutoInjectionResolver::class,
CurrentUserValueResolver::class,
DefaultValueResolver::class,
// Your custom resolver
MyCustomResolver::class,
],
],
'service_manager' => [
'factories' => [
// Factory for your custom resolver
MyCustomResolver::class => function (ContainerInterface $container) {
return new MyCustomResolver(/* dependencies */);
},
],
],
];