When i use OptinalInputFilter class, the translate object does not translate the validations errors.
i run the below the codes.
<?php
namespace App\Filter;
use App\Validator\Db\RecordExists;
use App\Validator\Db\NoRecordExists;
use Laminas\Filter\StringTrim;
use Laminas\Validator\Uuid;
use Laminas\InputFilter\OptionalInputFilter;
use Laminas\Validator\StringLength;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\InputFilter\InputFilterPluginManager;
class WorkplaceSaveFilter extends InputFilter
{
public function __construct(
AdapterInterface $adapter,
InputFilterPluginManager $filter
)
{
$this->filter = $filter;
$this->adapter = $adapter;
}
public function setInputData(array $data)
{
$this->add([
'name' => 'id',
'required' => true,
'validators' => [
['name' => Uuid::class],
[
'name' => HTTP_METHOD == 'POST' ? NoRecordExists::class : RecordExists::class,
'options' => [
'table' => 'workplaces',
'field' => 'workplaceId',
'adapter' => $this->adapter,
]
]
],
]);
$companyFilter = new OptionalInputFilter();
$companyFilter->add([
'name' => 'id',
'required' => true,
'validators' => [
['name' => Uuid::class],
[
'name' => RecordExists::class,
'options' => [
'table' => 'companies',
'field' => 'companyId',
'adapter' => $this->adapter,
]
]
],
]);
$this->add($companyFilter, 'companyId');
$this->add([
'name' => 'workplaceName',
'required' => true,
'filters' => [
['name' => StringTrim::class],
],
'validators' => [
[
'name' => StringLength::class,
'options' => [
'encoding' => 'UTF-8',
'min' => 3,
'max' => 255,
],
],
],
]);
$this->add([
'name' => 'registrationNumber',
'required' => false,
'filters' => [
['name' => StringTrim::class],
],
'validators' => [
[
'name' => StringLength::class,
'options' => [
'encoding' => 'UTF-8',
'min' => 3,
'max' => 100,
],
],
],
]);
$this->add([
'name' => 'address',
'required' => false,
'filters' => [
['name' => StringTrim::class],
],
'validators' => [
[
'name' => StringLength::class,
'options' => [
'encoding' => 'UTF-8',
'min' => 3,
'max' => 255,
],
],
],
]);
// Set input data
//
$this->setData($data);
}
}
Expected output:
{
"data": {
"error": {
"companyId": [
{
"id": [
"Şirket: Değer gereklidir ve boş bırakılamaz"
]
}
]
}
}
}
Active Result:
{
"data": {
"error": {
"companyId": [
{
"id": [
"Şirket: Value is required and can't be empty"
]
}
]
}
}
}
Here is my config provider
<?php
declare(strict_types=1);
use Laminas\ConfigAggregator\ArrayProvider;
use Laminas\ConfigAggregator\ConfigAggregator;
use Laminas\ConfigAggregator\PhpFileProvider;
// To enable or disable caching, set the `ConfigAggregator::ENABLE_CACHE` boolean in
// `config/autoload/local.php`.
$cacheConfig = [
'config_cache_path' => 'data/cache/config-cache.php',
];
$aggregator = new ConfigAggregator([
\Laminas\Cache\Storage\Adapter\Redis\ConfigProvider::class,
\Mezzio\Tooling\ConfigProvider::class,
\Mezzio\Cors\ConfigProvider::class,
\Laminas\Mail\ConfigProvider::class,
\Laminas\Paginator\ConfigProvider::class,
\Laminas\Mvc\I18n\ConfigProvider::class,
\Mezzio\Authorization\ConfigProvider::class,
\Laminas\Serializer\ConfigProvider::class,
\Laminas\Cache\ConfigProvider::class,
// \Mezzio\Authentication\LaminasAuthentication\ConfigProvider::class,
// \Mezzio\Authentication\OAuth2\ConfigProvider::class,
// \Mezzio\Authentication\ConfigProvider::class,
\Laminas\Db\ConfigProvider::class,
\Laminas\InputFilter\ConfigProvider::class,
\Laminas\Filter\ConfigProvider::class,
\Laminas\I18n\ConfigProvider::class,
\Laminas\HttpHandlerRunner\ConfigProvider::class,
// \Mezzio\LaminasView\ConfigProvider::class,
\Mezzio\Router\LaminasRouter\ConfigProvider::class,
\Laminas\Router\ConfigProvider::class,
\Laminas\Validator\ConfigProvider::class,
// Include cache configuration
new ArrayProvider($cacheConfig),
\Mezzio\Helper\ConfigProvider::class,
\Mezzio\ConfigProvider::class,
\Mezzio\Router\ConfigProvider::class,
\Laminas\Diactoros\ConfigProvider::class,
// Swoole config to overwrite some services (if installed)
class_exists(\Mezzio\Swoole\ConfigProvider::class)
? \Mezzio\Swoole\ConfigProvider::class
: function(){ return[]; },
// Default App module config
App\ConfigProvider::class,
// Load application config in a pre-defined order in such a way that local settings
// overwrite global settings. (Loaded as first to last):
// - `global.php`
// - `*.global.php`
// - `local.php`
// - `*.local.php`
// new PhpFileProvider(realpath(__DIR__) . '/autoload/{{,*.}global,{,*.}local}.php'),
new PhpFileProvider(realpath(__DIR__) . sprintf('/autoload/{,*.}{global,%s}.php', getenv('APP_ENV') ?: 'local')),
// Load development config if it exists
new PhpFileProvider(realpath(__DIR__) . '/development.config.php'),
], $cacheConfig['config_cache_path']);
return $aggregator->getMergedConfig();
Here is my TranslatorDelagatorFactory class
<?php
declare(strict_types=1);
namespace App\Container;
use Interop\Container\ContainerInterface;
use Laminas\I18n\Translator\Resources;
use Laminas\ServiceManager\Factory\DelegatorFactoryInterface;
class TranslatorDelegatorFactory implements DelegatorFactoryInterface
{
public function __invoke(ContainerInterface $container, $name, callable $callback, array $options = null)
{
$translator = $callback();
$translator->addTranslationFilePattern(
'phpArray',
Resources::getBasePath(),
Resources::getPatternForValidator()
);
$translator->addTranslationFilePattern(
'phpArray',
Resources::getBasePath(),
Resources::getPatternForCaptcha()
);
return $translator;
}
}
Help please thanks.