Не удалось определить тип доступа для свойства "translations" в Symfony 3.2.* С проектом администратора Sonata и пакетом перевода Sonata
Я установил проект администратора Sonata в версии Symfony 3.2.*. Компоненты, которые используются в моем проекте из файла composer.json:
Фрагмент пакета файла composer.json
"require": {
"php": ">=5.5.9",
"ext-pdo_sqlite": "*",
"a2lix/i18n-doctrine-bundle": "^0.1.0",
"a2lix/translation-form-bundle": "^2.1",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2",
"doctrine/doctrine-fixtures-bundle": "^2.2",
"doctrine/orm": "^2.5",
"erusev/parsedown": "^1.5",
"ezyang/htmlpurifier": "^4.7",
"friendsofsymfony/user-bundle": "~2.0@dev",
"incenteev/composer-parameter-handler": "^2.0",
"sensio/distribution-bundle": "^5.0",
"sensio/framework-extra-bundle": "^3.0.2",
"sonata-project/admin-bundle": "^3.12",
"sonata-project/doctrine-orm-admin-bundle": "^3.1",
"sonata-project/translation-bundle": "^2.1",
"stof/doctrine-extensions-bundle": "^1.2",
"symfony/monolog-bundle": "^3.0",
"symfony/polyfill-apcu": "^1.0",
"symfony/property-access": "^3.2",
"symfony/swiftmailer-bundle": "^2.3",
"symfony/symfony": "^3.2",
"twig/extensions": "^1.3",
"twig/twig": "^1.28",
"white-october/pagerfanta-bundle": "^1.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer" : "^1.12",
"phpunit/phpunit" : "^4.8 || ^5.0",
"sensio/generator-bundle" : "^3.0",
"symfony/phpunit-bridge" : "^3.0"
},
подробности
Я использую комплект перевода. Так что в моей форме для каждого поля у меня есть эти поля для двух языков. Форма отлично отрисовывается на разных языках. Но когда я отправляю форму, я получаю ошибку ниже:
Не удалось определить тип доступа для свойства "translations".
Трассировка стека в vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php
по линии 649
} elseif (self::ACCESS_TYPE_MAGIC === $access[self::ACCESS_TYPE]) {
$object->{$access[self::ACCESS_NAME]}($value);
} elseif (self::ACCESS_TYPE_NOT_FOUND === $access[self::ACCESS_TYPE]) {
throw new NoSuchPropertyException(sprintf('Could not determine access type for property "%s".', $property));
} else {
throw new NoSuchPropertyException($access[self::ACCESS_NAME]);
}
Среда
Соната пакеты
$ composer show sonata-project/*
sonata-project/admin-bundle 3.12.0 The missing Symfony Admin ...
sonata-project/block-bundle 3.3.0 Symfony SonataBlockBundle
sonata-project/cache 1.0.7 Cache library
sonata-project/core-bundle 3.2.0 Symfony SonataCoreBundle
sonata-project/doctrine-orm-admin-bundle 3.1.3 Symfony Sonata / Integrate...
sonata-project/exporter 1.7.0 Lightweight Exporter library
sonata-project/translation-bundle 2.1.0 SonataTranslationBundle
Пакеты Symfony
$ composer show symfony/*
symfony/monolog-bundle 3.0.1 Symfony MonologBundle
symfony/phpunit-bridge v3.2.1 Symfony PHPUnit Bridge
symfony/polyfill-apcu v1.3.0 Symfony polyfill backporting apcu_* func...
symfony/polyfill-intl-icu v1.3.0 Symfony polyfill for intl's ICU-related ...
symfony/polyfill-mbstring v1.3.0 Symfony polyfill for the Mbstring extension
symfony/polyfill-php56 v1.3.0 Symfony polyfill backporting some PHP 5....
symfony/polyfill-php70 v1.3.0 Symfony polyfill backporting some PHP 7....
symfony/polyfill-util v1.3.0 Symfony utilities for portability of PHP...
symfony/security-acl v3.0.0 Symfony Security Component - ACL (Access...
symfony/swiftmailer-bundle v2.4.2 Symfony SwiftmailerBundle
symfony/symfony v3.2.2 The Symfony PHP framework
Версия PHP
$ php -v
# $ php -v
PHP 5.6.20 (cli) (built: Mar 31 2016 14:56:44)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
2 ответа
В большинстве случаев эта ошибка выдается, когда вы забываете инициализировать коллекцию в конструкторе вашего класса сущностей.
Посмотрите на свой класс сущности. Вам нужно добавить
$this->translations = new ArrayCollection();
конструктору.
В более общем смысле PropertyAccess отвечает за вызов методов установки / получения вашей сущности, поэтому обычно это проблема, связанная с вашим классом сущности, а не с типом формы.
Я разработал многоязычное веб-приложение в Symfony 3.2.* Демонстрационный URL, который я разветвил: A2Lix-Multilingual-Transurable-Symfony3