Я новичок в использовании Symfony2.8, и у меня возникла проблема с проверкой.
Вот как выглядит мой код из инъекции зависимостей -
<?php
namespace AppBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
class AppExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container) {
$r = new \ReflectionClass(get_class($this));
$dir = dirname($r->getFileName());
$loader = new YamlFileLoader($container, new FileLocator($dir.'/../Resources/config'));
$loader->load('validation.yml');
}
}
А затем я пытаюсь подтвердить, что эти два столбца уникальны. (Уникальное ограничение).
# src/AppBundle/Resources/config/validation.yml
AppBundle\Entity\StaticContent:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
fields: [build, name]
С StaticContent в Entity, и он жалуется, что не может найти StaticContent.
nebo@localhost:/var/www/html/iclei$ php app/console doctrine:schema:update --dump-sql
[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]
There is no extension able to load the configuration for "AppBundle\Entity\StaticContent" (in /var/www/html/iclei/src/AppBundle/DependencyInjection/../Resources/config/validation.yml). Looked for nam
espace "AppBundle\Entity\StaticContent", found none
Что я делаю неправильно ? Также у меня внутри
app/config/config.yml
framework:
#esi: ~
#translator: { fallbacks: ['%locale%'] }
secret: '%secret%'
router:
resource: '%kernel.root_dir%/config/routing.yml'
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enabled: true, enable_annotations: true }
И это структура Bundle, которую мы строим. DIR / SRC / AppBundle / Resources / config / doctrine / StaticContent.orm.yml DIR / SRC / AppBundle / DependencyInjection / AppExtension.php
Это моя конфигурация доктрины:
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: '%kernel.root_dir%/data/data.db3'
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
#path: '%database_path%'
orm:
entity_managers:
default:
mappings:
AppBundle: ~
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
По запросу I13 добавляю свою сущность.
<?php
namespace AppBundle\Entity;
/**
* StaticContent
*/
class StaticContent
{
/**
* @var int
*/
private $id;
/**
* @var int
*/
private $build;
/**
* @var string
*/
private $name;
/**
* @var string
*/
private $type;
/**
* @var string
*/
private $data;
Со своими геттерами и сеттерами.
AppBundle\Entity\StaticContent:
type: entity
table: null
repositoryClass: AppBundle\Repository\StaticContentRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
name:
type: string
length: 255
data:
type: blob
manyToOne:
build:
targetEntity: AppBundle\Entity\Build
inversedBy: staticContents
joinColumn:
name: build_id
referencedColumnName: id
lifecycleCallbacks: { }
пространство имен AppBundle \ Entity;
класс StaticContent
Попробуйте это: stackoverflow.com/questions/28937442/…
Можете ли вы также опубликовать отображение yml? (StaticContent.orm.yml)
Да, я обновил вопрос.
Первое, что я вижу: почему имя вашей таблицы пустое?
У вас есть файл AppBundle \ DependencyInjection \ Configuration?
Нет, у меня нет файла AppBundle \ DependencyInjection \ Configuration.
И это построил кто-то другой в команде и наивно полагал, что это было построено правильным образом.
Но все равно не могу заставить его работать.




Пожалуйста, попробуйте включить пакет в конфигурации доктрины и скажите, работает ли он:
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
orm:
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
auto_mapping: true
mappings:
YOURBundle: ~
Изменить расширение приложения:
<?php
namespace AppBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
class AppExtension extends Extension {
/**
* {@inheritdoc}
*/
public function load(array $configs, ContainerBuilder $container) {
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
}
}
Хм, я не уверен, правильно ли я вас понял. Но знайте, что это не работает, потому что он жалуется на конфигурацию orm.
[Symfony \ Component \ Config \ Definition \ Exception \ InvalidConfig urationException] Нераспознанные параметры "naming_strategy, auto_mapping" в "doctrine.orm"
Ну он установлен по умолчанию.
Ой, извини. Только что я заметил, что по умолчанию используется другой цвет.
По-прежнему та же проблема.
Неужели так сложно заставить валидацию работать в Symfony2.8? Или это просто моя испорченная конфигурация?
Попробуйте удалить enabled: validation: {enable_annotations: true}
Вы можете показать мне свою сущность (AppBundle \ Entity \ StaticContent)?
Хотите продолжить обсуждение в чате? Было бы проще.
<? php namespace AppBundle \ Entity; / ** * StaticContent * / class StaticContent {
Это похоже на это? Вы что-нибудь видите?
Вы проверили пространство имен StaticContent, имя файла и класса (включая регистр и расширение файла), чтобы отложить сбой автозагрузки для объекта?