Skip to content
This repository was archived by the owner on Mar 18, 2025. It is now read-only.

Support for attributes and Symfony 6.4 #3

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,23 @@
}
},
"require": {
"php": "8.0.*|8.1.*",
"php": "^8.0",
"ext-json": "*",
"doctrine/annotations": "~1.13",
"doctrine/annotations": "^1.13|^2.0",
"jms/metadata": "~2.6",
"jms/serializer": "~3.17",
"symfony/dependency-injection": "~5.0",
"symfony/event-dispatcher": "~5.0",
"symfony/expression-language": "~5.0",
"symfony/http-foundation": "~5.0",
"symfony/security-core": "~5.0",
"symfony/validator": "~5.0"
"symfony/dependency-injection": "6.4.*",
"symfony/event-dispatcher": "6.4.*",
"symfony/expression-language": "6.4.*",
"symfony/http-foundation": "6.4.*",
"symfony/security-core": "6.4.*",
"symfony/validator": "6.4.*"
},
"require-dev": {
"koriym/attributes": "^1.0",
"phpunit/phpunit": "^9.5",
"symfony/phpunit-bridge": "~5.0",
"symfony/stopwatch": "~5.0"
"symfony/phpunit-bridge": "6.4.*",
"symfony/stopwatch": "6.4.*"
},
"extra": {
"branch-alias": {
Expand Down
16 changes: 7 additions & 9 deletions src/Annotation/Action.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

namespace TQ\ExtDirect\Annotation;

use Doctrine\Common\Annotations\NamedArgumentConstructor;

/**
* Class Action
Expand All @@ -17,16 +18,13 @@
*
* @Annotation
* @Target("CLASS")
* @NamedArgumentConstructor
*/
#[\Attribute(\Attribute::TARGET_CLASS)]
class Action
{
/**
* @var string
*/
public $serviceId;

/**
* @var string
*/
public $alias;
public function __construct(
public ?string $serviceId = null,
public ?string $alias = null,
) {}
}
34 changes: 10 additions & 24 deletions src/Annotation/Method.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

namespace TQ\ExtDirect\Annotation;

use Doctrine\Common\Annotations\NamedArgumentConstructor;

/**
* Class Method
Expand All @@ -17,31 +18,16 @@
*
* @Annotation
* @Target("METHOD")
* @NamedArgumentConstructor
*/
#[\Attribute(\Attribute::TARGET_METHOD)]
class Method
{
/**
* @var bool
*/
public $formHandler = false;

/**
* @var bool
*/
public $namedParams = false;

/**
* @var bool
*/
public $strict = true;

/**
* @var mixed
*/
public $batched = null;

/**
* @var bool
*/
public $session = true;
public function __construct(
public bool $formHandler = false,
public bool $namedParams = false,
public bool $strict = true,
public mixed $batched = null,
public bool $session = true,
) {}
}
97 changes: 24 additions & 73 deletions src/Annotation/Parameter.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,97 +9,48 @@

namespace TQ\ExtDirect\Annotation;

use Doctrine\Common\Annotations\NamedArgumentConstructor;

/**
* Class Parameter
*
* @package TQ\ExtDirect\Annotation
*
* @Annotation
* @Target("METHOD")
* @NamedArgumentConstructor
*/
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Parameter
{
/**
* @\Doctrine\Common\Annotations\Annotation\Required
*
* @var string
*/
public $name;
public function __construct(
public string $name,

/**
* @var array<Symfony\Component\Validator\Constraint>
*/
public $constraints = array();
/** @var string|array<Symfony\Component\Validator\Constraint> */
public string|array $constraints = [],

/**
* @var array<string>
*/
public $validationGroups;
/** @var string|null|array<string> */
public string|null|array $validationGroups = null,

/**
* @var bool
*/
public $strict = true;
public bool $strict = true,

/**
* @var array<string>
*/
public $serializationGroups = [];
/** @var string|array<string> */
public string|array $serializationGroups = [],

/**
* @var array<string>
*/
public $serializationAttributes = [];
/** @var string|array<string> */
public string|array $serializationAttributes = [],

/**
* @var int|null
*/
public $serializationVersion = null;
public ?int $serializationVersion = null,
) {
$arrayProperties = [
'constraints', 'validationGroups', 'serializationGroups',
'serializationAttributes'
];

/**
* @param array $data
*/
public function __construct(array $data)
{
if (isset($data['value'])) {
if (is_array($data['value'])) {
$data['name'] = array_shift($data['value']);
if (!empty($data['value'])) {
$data['constraints'] = array_shift($data['value']);
}
if (!empty($data['value'])) {
$data['validationGroups'] = array_shift($data['value']);
}
if (!empty($data['value'])) {
$data['strict'] = array_shift($data['value']);
}
if (!empty($data['value'])) {
$data['serializationGroups'] = array_shift($data['value']);
}
if (!empty($data['value'])) {
$data['serializationAttributes'] = array_shift($data['value']);
}
if (!empty($data['value'])) {
$data['serializationVersion'] = array_shift($data['value']);
}
} else {
$data['name'] = $data['value'];
foreach ($arrayProperties as $property) {
if (is_string($$property)) {
$this->$property = [$$property];
}
unset($data['value']);
}

foreach ($data as $k => $v) {
if ($k == 'constraints' && !is_array($v)) {
$v = array($v);
} elseif ($k == 'validationGroups' && !is_array($v)) {
$v = array($v);
} elseif ($k == 'serializationGroups' && !is_array($v)) {
$v = array($v);
} elseif ($k == 'serializationAttributes' && !is_array($v)) {
$v = array($v);
}

$this->{$k} = $v;
}
}
}
56 changes: 14 additions & 42 deletions src/Annotation/Result.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

namespace TQ\ExtDirect\Annotation;

use Doctrine\Common\Annotations\NamedArgumentConstructor;

/**
* Class Result
Expand All @@ -17,55 +18,26 @@
*
* @Annotation
* @Target("METHOD")
* @NamedArgumentConstructor
*/
#[\Attribute(\Attribute::TARGET_METHOD)]
class Result
{
/**
* @var array<string>
*/
public $groups = [];
public function __construct(
/** @var string|array<string> */
public string|array $groups = [],

/**
* @var array<string>
*/
public $attributes = [];
/** @var string|array<string> */
public string|array $attributes = [],

/**
* @var int|null
*/
public $version = null;
public ?int $version = null,
) {
$arrayProperties = ['groups', 'attributes'];

/**
* @param array $data
*/
public function __construct(array $data)
{
if (isset($data['value'])) {
if (is_array($data['value'])) {
$data['groups'] = array_shift($data['value']);
if (!empty($data['value'])) {
$data['constraints'] = array_shift($data['value']);
}
if (!empty($data['value'])) {
$data['attributes'] = array_shift($data['value']);
}
if (!empty($data['value'])) {
$data['version'] = array_shift($data['value']);
}
} else {
$data['groups'] = $data['value'];
foreach ($arrayProperties as $property) {
if (is_string($$property)) {
$this->$property = [$$property];
}
unset($data['value']);
}

foreach ($data as $k => $v) {
if ($k == 'groups' && !is_array($v)) {
$v = array($v);
} elseif ($k == 'attributes' && !is_array($v)) {
$v = array($v);
}

$this->{$k} = $v;
}
}
}
11 changes: 5 additions & 6 deletions src/Annotation/Security.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,19 @@

namespace TQ\ExtDirect\Annotation;

use Doctrine\Common\Annotations\NamedArgumentConstructor;

/**
* Class Security
*
* @package TQ\ExtDirect\Annotation
*
* @Annotation
* @Target({"CLASS","METHOD"})
* @NamedArgumentConstructor
*/
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD)]
class Security
{
/**
* @\Doctrine\Common\Annotations\Annotation\Required
*
* @var string
*/
public $expression;
public function __construct(public string $expression) {}
}
2 changes: 1 addition & 1 deletion src/Http/ServiceDescriptionResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function setDescriptor(string $descriptor): self
/**
* {@inheritdoc}
*/
protected function update(): self
protected function update(): static
{
$this->headers->set('Content-Type', 'application/javascript');

Expand Down
2 changes: 1 addition & 1 deletion src/Http/UploadResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public function setResponse(Response $response)
/**
* {@inheritdoc}
*/
protected function update()
protected function update(): static
{
if ($this->response !== null) {
$this->headers->set('Content-Type', 'text/html; charset=UTF-8');
Expand Down
2 changes: 1 addition & 1 deletion src/Router/RequestFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public function createRequest(HttpRequest $request)
throw BadRequestException::createMethodNotAllowed($request);
}

if ($request->getContentType() == 'json') {
if ($request->getContentTypeFormat() == 'json') {
return $this->createJsonRequest($request);
} else {
return $this->createFormRequest($request);
Expand Down
Loading