Я не могу воспроизвести эту ошибку ни на другом сервере, ни в своей среде разработки…
Проблема может исходить от валидатора, но я не уверен, является ли это ошибкой symfony или доктриной.
Данные POST идентичны на рабочем сервере и в среде разработки:
report_selection[iFrame]: 1
report_selection[dteFrom]: 2023-01-30 07:00
report_selection[dteTo]: 2023-01-31 07:00
report_selection[reportType]: 1
report_selection[size]: 200
report_selection[product]: 1
report_selection[submit]:
Я предполагаю, что пустое поле submit
не является проблемой, поскольку другие формы работают нормально, если одно и то же поле пусто.
Структура базы данных одинакова на всех серверах.
Вот код формы:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$bDisplaySize = $options['bDisplaySize'];
$bDisplayReportType = $options['bDisplayReportType'];
$bDisplayProduct = $options['bDisplayProduct'];
$defaultValue = $options['defaultValue'];
$em = $options['entity_manager'];
list($H, $m) = explode(":", $iShiftStart);
$initialFromDate = (new DateTime())->modify('-'.$H.' hour');
$initialFromDate = $initialFromDate->modify('-1 day');
$initialFromDate->setTime((int)$iShiftStart, (int)$m, 0);
$initialToDate = clone $initialFromDate;
$initialToDate = $initialToDate->modify('+1 day');
$builder->add(
'iFrame',
ChoiceType::class,
array(
'label' => 'master.preselection',
'choices' => [
'master.yesterday' => false,
'master.today' => false,
'master.thisWeek' => false,
'master.lastWeek' => false,
'master.thisMonth' => false,
'master.lastMonth' => false,
'master.memomryDate' => false,
],
'attr' => ['onchange' => 'refreshPreselectedChoices()'],
'choice_attr' => [
'master.yesterday' => [],
'master.today' => ['selected' => 'selected'],
'master.thisWeek' => [],
'master.lastWeek' => [],
'master.thisMonth' => [],
'master.lastMonth' => [],
'master.memomryDate' => ['disabled' => true],
],
)
);
$builder->add(
'dteFrom',
TextType::class,
array(
'label' => 'form.from',
'data' => $initialFromDate->format('Y-m-d H:i'),
'attr' => array(
'style' => 'width:150px;',
'oninput' => 'dteFromToCustom()',
'onchange' => 'dteFromToCustom()',
),
)
);
$builder->add(
'dteTo',
TextType::class,
array(
'label' => 'form.to',
'data' => $initialToDate->format('Y-m-d H:i'),
'attr' => array(
'label' => 'form.to',
'style' => 'width:150px;',
'oninput' => 'dteFromToCustom()',
'onchange' => 'dteFromToCustom()',
),
)
);
if ($bDisplayReportType) {
$builder->add(
'reportType',
ChoiceType::class,
array(
'label' => 'summaryReport.data',
'choices' => array(
'summaryReport.type1' => '1',
'summaryReport.type2' => '2',
),
)
);
}
if ($bDisplaySize) {
$builder->add(
'size',
EntityType::class,
array(
'class' => ProductsSizeSpecs::class,
'choice_label' => 'rSize',
'choice_value' => 'rSize',
'placeholder' => '',
'label' => 'form.size',
'required' => false,
'mapped' => false,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('e')
->groupBy('e.rSize')
->orderBy('e.rSize', 'ASC');
},
)
);
}
if ($bDisplayProduct) {
$builder->add(
'product',
EntityType::class,
array(
'class' => Products::class,
'choice_label' => 'sNumber',
'choice_value' => 'sNumber',
'placeholder' => '',
'label' => 'master.product',
'required' => false,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('e')
->groupBy('e.sNumber')
->orderBy('e.sNumber', 'ASC');
},
)
);
}
$builder->add(
'submit',
SubmitType::class,
array(
'label' => 'form.submit',
'attr' => array('class' => 'btn btn-primary'),
)
);
}
Другие формы используют точно такой же код с большим или меньшим количеством опций.
Я ищу способ отладить это на рабочем сервере (список/дамп «пустых» полей?).
Любой намек будет оценен, спасибо!
3 / 3 / 2 Регистрация: 21.04.2014 Сообщений: 216 |
|
1 |
|
Запись не верна: значение поля не может быть пустым03.08.2016, 10:55. Показов 30191. Ответов 4
Конфа erp 2.1. Не проводится документ Заказ давальца. Ошибка:
0 |
3 / 3 / 2 Регистрация: 21.04.2014 Сообщений: 216 |
|
03.08.2016, 11:20 [ТС] |
2 |
через отладчик смотрел , ошибка вылазиет на строке Результат = Форма.Записать(ПараметрыЗаписи); {ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1137)}: Ошибка при вызове метода контекста (Записать) Миниатюры
0 |
Модератор 3724 / 2918 / 575 Регистрация: 10.03.2011 Сообщений: 11,491 Записей в блоге: 1 |
|
03.08.2016, 16:46 |
3 |
Запись не верна! Значение поля «Код строки» не может быть пустым! Мне кажется ключевое не отладка, а вот это сообщение! =)))
0 |
3 / 3 / 2 Регистрация: 21.04.2014 Сообщений: 216 |
|
04.08.2016, 07:02 [ТС] |
4 |
Dethmontt, убрал галку на запрет незаполненных значений на поле КодСтроки, документ провелся и КодСтроки заполняется, но с галкой почему то выдает ошибку. Вариант без этой галки не подходит. Как можно исправить это?
0 |
Модератор 3724 / 2918 / 575 Регистрация: 10.03.2011 Сообщений: 11,491 Записей в блоге: 1 |
|
04.08.2016, 11:12 |
5 |
juristbrn, начать с того, что нужно понять из какого события растут ноги. Ставим отладку — остановку по ошибке — открываем стек вызовов и смотрим что там написано
0 |
- Главная
- Форумы
- Техподдержка Drupal
- Решение проблем
Сообщение формы «Данное значение не должно быть пустым»
Главные вкладки
- Просмотр(активная вкладка)
- Реакции
При отправке контактной формы постоянно выскакивает сообщение об ошибке: «Данное значение не должно быть пустым». Все поля заполнены, какое-такое данное… Кто-нибудь сталкивался с такой проблемой?
- Drupal8
- Есть вопрос
- Решение проблем
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Лучший ответ
pingvin156
12 декабря 2018 в 19:55
Оказалось причина вот в чем: было ранее добавлено поле «файл» (обязательное), но потом alter_form удалено. Сделал необязательным, заработало
Комментарии
ivnish
12 декабря 2018 в 15:48
Скрытых с помощью CSS полей нет?
pingvin156
12 декабря 2018 в 16:14
Нет. Есть изображение необязательное
pingvin156
12 декабря 2018 в 19:55
Оказалось причина вот в чем: было ранее добавлено поле «файл» (обязательное), но потом alter_form удалено. Сделал необязательным, заработало
у меня есть Phone
класс и Country
класс в проекте Symfony 2.8.
Одно из полей Phone
класс $country
который является Country
объект.
У меня также есть форма с полем EntityType, которую я использую для выбора из списка стран в моей базе данных.
Моя проблема заключается в том, что когда я выбираю страну из выпадающего меню, созданного в поле EntityType, и отправляю форму, я получаю сообщение об ошибке «Это значение не должно быть пустым». несколько раз над выпадающим меню EntityField.
Что странно, что я делаю dump($phone)
после $form->handleRequest($request);
и поле $ country показывает правильный объект Country, выбранный из базы данных.
Это происходит только тогда, когда @AssertValid()
ограничение на $country
поле. Как только я уберу это, ошибка исчезнет.
Дело в том, что я хочу продолжать проверять поле страны моего Phone
учебный класс.
Любые идеи о том, почему это происходит, будет принята с благодарностью!
Phone
учебный класс:
namespace AppBundleEntity;
use DoctrineORMMapping as ORM;
use SymfonyComponentValidatorConstraints as Assert;
/**
* Phone
*
* @ORMTable(name="phones", uniqueConstraints={@ORMUniqueConstraint(name="natural_pk", columns={"phone_name", "country_id", "phone_number", "extension"})})
* @ORMEntity(repositoryClass="AppBundleRepositoryPhoneRepository")
* @ORMHasLifecycleCallbacks
*/
class Phone
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*
* @AssertType(type="int")
*/
protected $id;
/**
* @var Country
*
* @ORMManyToOne(targetEntity="Country")
* @ORMJoinColumn(nullable=false)
*
* @AssertNotBlank()
* @AssertValid()
*/
protected $country;
/**
* @var string
*
* @ORMColumn(name="phone_number", type="string", length=20, nullable=false)
*
* @AssertNotBlank()
* @AssertType(type="string")
* @AssertLength(max=20)
*/
protected $phoneNumber;
public function __toString()
{
return $this->phoneNumber;
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set phoneNumber
*
* @param string $phoneNumber
*
* @return Phone
*/
public function setPhoneNumber($phoneNumber)
{
$this->phoneNumber = $phoneNumber;
return $this;
}
/**
* Get phoneNumber
*
* @return string
*/
public function getPhoneNumber()
{
return $this->phoneNumber;
}
/**
* Set country
*
* @param AppBundleEntityCountry $country
*
* @return Phone
*/
public function setCountry(AppBundleEntityCountry $country)
{
$this->country = $country;
return $this;
}
/**
* Get country
*
* @return AppBundleEntityCountry
*/
public function getCountry()
{
return $this->country;
}
}
Класс страны:
namespace AppBundleEntity;
use DoctrineORMMapping as ORM;
use SymfonyComponentValidatorConstraints as Assert;
/**
* Country
*
* @ORMTable(name="countries")
* @ORMEntity(repositoryClass="AppBundleRepositoryCountryRepository")
*/
class Country
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*
* @AssertType(type="int")
*/
protected $id;
/**
* @var string
*
* @ORMColumn(name="country_name", type="string", length=255, nullable=false)
*
* @AssertNotBlank()
* @AssertType(type="string")
* @AssertLength(max=255)
*/
protected $countryName;
/**
* @var string
*
* @ORMColumn(name="phone_code", type="string", length=10, nullable=false)
*
* @AssertNotBlank()
* @AssertType(type="string")
* @AssertLength(max=10)
*/
protected $phoneCode;
public function __toString()
{
return $this->phoneCode;
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set countryName
*
* @param string $countryName
*
* @return Country
*/
public function setCountryName($countryName)
{
$this->countryName = $countryName;
return $this;
}
/**
* Get countryName
*
* @return string
*/
public function getCountryName()
{
return $this->countryName;
}
/**
* Set phoneCode
*
* @param string $phoneCode
*
* @return Country
*/
public function setPhoneCode($phoneCode)
{
$this->phoneCode = $phoneCode;
return $this;
}
/**
* Get phoneCode
*
* @return string
*/
public function getPhoneCode()
{
return $this->phoneCode;
}
}
1
Решение
Я наконец нашел решение проблемы.
Оказывается, мой Country
класс на самом деле имеет другое поле из двунаправленной ассоциации под названием $provinces
и это поле имеет Valid()
ограничение также:
/**
* @var Province[]
*
* @ORMOneToMany(targetEntity="Province", mappedBy="country")
*
* @AssertValid()
*/
protected $provinces;
Это было причиной ошибки, я думаю, потому что если $provinces
пустой массив, Country
объект не выполняет Symfony’s Valid()
ограничение.
Чтобы решить эту проблему, мне пришлось либо удалить Valid()
ограничение на $provinces
поле в классе Country или на $country
поле в Phone
учебный класс.
0
Другие решения
Вы можете отключить проверку, указав несуществующую группу проверки в типе формы:
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['validation_groups' => ['no-validation']]); // Do not validate entities.
}
Не нашел лучшего решения: /
0
I am using the DynamoDB as storage. When I try to get an access token with grant_type ‘client_credentials’ or ‘password’, I get the «The value must not be empty» error message. I traced the error down to the ‘setAccessToken’ function of DynamodDB
bshafferoauth2-server-phpsrcOAuth2StorageDynamoDB.php
public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
{
// convert expires to datestring
$expires = date('Y-m-d H:i:s', $expires);
$clientData = compact('access_token', 'client_id', 'user_id', 'expires', 'scope');
$clientData = array_filter($clientData, function ($value) { return !is_null($value); });
$result = $this->client->putItem(array(
'TableName' => $this->config['access_token_table'],
'Item' => $this->client->formatAttributes($clientData)
));
return true;
}
It seems DynamoDB bombs out when i try to save an item with an attribute having an empty value.
It works if i replace «!is_null($value)» with «!empty($value) line 174
$clientData = array_filter($clientData, function ($value) { return !empty($value); });
Same error when refreshing tokens,
public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
{
// convert expires to datestring
$expires = date('Y-m-d H:i:s', $expires);
$clientData = compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope');
$clientData = array_filter($clientData, function ($value) { return !is_null($value); });
$result = $this->client->putItem(array(
'TableName' => $this->config['refresh_token_table'],
'Item' => $this->client->formatAttributes($clientData)
));
return true;
}
Is there a better solution/workaround this? Thanks.