Issue #2257769 by tstoeckler | sun: Adding an Entity Reference field in the Field UI throws a PHP notice; fails to add field.
parent
39edc2708e
commit
ac31f29da3
|
|
@ -477,8 +477,12 @@ class FieldDefinition extends ListDataDefinition implements FieldDefinitionInter
|
||||||
$definition = \Drupal::service('plugin.manager.field.field_type')->getDefinition($this->getType());
|
$definition = \Drupal::service('plugin.manager.field.field_type')->getDefinition($this->getType());
|
||||||
$class = $definition['class'];
|
$class = $definition['class'];
|
||||||
$schema = $class::schema($this);
|
$schema = $class::schema($this);
|
||||||
// Fill in default values for optional entries.
|
// Fill in default values.
|
||||||
$schema += array('indexes' => array(), 'foreign keys' => array());
|
$schema += array(
|
||||||
|
'columns' => array(),
|
||||||
|
'indexes' => array(),
|
||||||
|
'foreign keys' => array(),
|
||||||
|
);
|
||||||
|
|
||||||
// Check that the schema does not include forbidden column names.
|
// Check that the schema does not include forbidden column names.
|
||||||
if (array_intersect(array_keys($schema['columns']), static::getReservedColumns())) {
|
if (array_intersect(array_keys($schema['columns']), static::getReservedColumns())) {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ namespace Drupal\Core\Field;
|
||||||
use Drupal\Component\Plugin\Factory\DefaultFactory;
|
use Drupal\Component\Plugin\Factory\DefaultFactory;
|
||||||
use Drupal\Core\Cache\CacheBackendInterface;
|
use Drupal\Core\Cache\CacheBackendInterface;
|
||||||
use Drupal\Core\Extension\ModuleHandlerInterface;
|
use Drupal\Core\Extension\ModuleHandlerInterface;
|
||||||
use Drupal\Core\Language\LanguageManager;
|
use Drupal\Core\Language\LanguageManagerInterface;
|
||||||
use Drupal\Core\Plugin\DefaultPluginManager;
|
use Drupal\Core\Plugin\DefaultPluginManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -26,12 +26,12 @@ class FieldTypePluginManager extends DefaultPluginManager implements FieldTypePl
|
||||||
* keyed by the corresponding namespace to look for plugin implementations.
|
* keyed by the corresponding namespace to look for plugin implementations.
|
||||||
* @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
|
* @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
|
||||||
* Cache backend instance to use.
|
* Cache backend instance to use.
|
||||||
* @param \Drupal\Core\Language\LanguageManager $language_manager
|
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
|
||||||
* The language manager.
|
* The language manager.
|
||||||
* @param \Drupal\Core\Extension\ModuleHandlerInterface
|
* @param \Drupal\Core\Extension\ModuleHandlerInterface
|
||||||
* The module handler.
|
* The module handler.
|
||||||
*/
|
*/
|
||||||
public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, LanguageManager $language_manager, ModuleHandlerInterface $module_handler) {
|
public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, LanguageManagerInterface $language_manager, ModuleHandlerInterface $module_handler) {
|
||||||
parent::__construct('Plugin/Field/FieldType', $namespaces, $module_handler, 'Drupal\Core\Field\Annotation\FieldType');
|
parent::__construct('Plugin/Field/FieldType', $namespaces, $module_handler, 'Drupal\Core\Field\Annotation\FieldType');
|
||||||
$this->alterInfo('field_info');
|
$this->alterInfo('field_info');
|
||||||
$this->setCacheBackend($cache_backend, $language_manager, 'field_types_plugins');
|
$this->setCacheBackend($cache_backend, $language_manager, 'field_types_plugins');
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ class AnnotatedClassDiscovery extends ComponentAnnotatedClassDiscovery {
|
||||||
$reader = parent::getAnnotationReader();
|
$reader = parent::getAnnotationReader();
|
||||||
|
|
||||||
// Add the Core annotation classes like @Translation.
|
// Add the Core annotation classes like @Translation.
|
||||||
$reader->addNamespace('Drupal\Core\Annotation', array(DRUPAL_ROOT . '/core/lib/Drupal/Core/Annotation'));
|
$reader->addNamespace('Drupal\Core\Annotation', array(dirname(dirname(__DIR__)) . '/Annotation'));
|
||||||
$this->annotationReader = $reader;
|
$this->annotationReader = $reader;
|
||||||
}
|
}
|
||||||
return $this->annotationReader;
|
return $this->annotationReader;
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,12 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||||
/**
|
/**
|
||||||
* Modules to enable.
|
* Modules to enable.
|
||||||
*
|
*
|
||||||
|
* Enable path module to ensure that the selection handler does not fail for
|
||||||
|
* entities with a path field.
|
||||||
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
public static $modules = array('node', 'field_ui', 'entity_reference');
|
public static $modules = array('node', 'field_ui', 'entity_reference', 'path');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \Drupal\path\Tests\Plugin\Field\FieldType\PathFieldDefinitionTest
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\path\Tests\Field;
|
||||||
|
|
||||||
|
use Drupal\Tests\Core\Field\FieldDefinitionTestBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests a field definition for a 'path' field.
|
||||||
|
*
|
||||||
|
* @see \Drupal\Core\Field\FieldDefinition
|
||||||
|
* @see \Drupal\path\Plugin\Field\FieldType\PathItem
|
||||||
|
*
|
||||||
|
* @group Drupal
|
||||||
|
* @group path
|
||||||
|
*/
|
||||||
|
class PathFieldDefinitionTest extends FieldDefinitionTestBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static function getInfo() {
|
||||||
|
return array(
|
||||||
|
'name' => 'Path field definitions',
|
||||||
|
'description' => 'Tests that field definitions for path fields work correctly.',
|
||||||
|
'group' => 'Path',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function getPluginId() {
|
||||||
|
return 'path';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function getNamespacePath() {
|
||||||
|
return dirname(dirname(dirname(__DIR__))) . '/lib/Drupal/path';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests FieldDefinition::getColumns().
|
||||||
|
*
|
||||||
|
* @covers \Drupal\Core\Field\FieldDefinition::getColumns
|
||||||
|
* @covers \Drupal\path\Plugin\Field\FieldType\PathItem::getSchema
|
||||||
|
*/
|
||||||
|
public function testGetColumns() {
|
||||||
|
$this->assertSame(array(), $this->definition->getColumns());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \Drupal\Tests\Core\Fied\FieldDefinitionTestBase.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\Tests\Core\Field;
|
||||||
|
|
||||||
|
use Drupal\Core\DependencyInjection\ContainerBuilder;
|
||||||
|
use Drupal\Core\Field\FieldDefinition;
|
||||||
|
use Drupal\Core\Field\FieldTypePluginManager;
|
||||||
|
use Drupal\Core\Language\Language;
|
||||||
|
use Drupal\Tests\UnitTestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a test base class for testing field definitions.
|
||||||
|
*/
|
||||||
|
abstract class FieldDefinitionTestBase extends UnitTestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The field definition used in this test.
|
||||||
|
*
|
||||||
|
* @var \Drupal\Core\Field\FieldDefinition
|
||||||
|
*/
|
||||||
|
protected $definition;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function setUp() {
|
||||||
|
$namespace_path = $this->getNamespacePath();
|
||||||
|
// Suppport both PSR-0 and PSR-4 directory layouts.
|
||||||
|
$module_name = basename($namespace_path);
|
||||||
|
if ($module_name == 'src') {
|
||||||
|
$module_name = basename($module_name);
|
||||||
|
}
|
||||||
|
$namespaces = new \ArrayObject(array(
|
||||||
|
'Drupal\\' . $module_name => $namespace_path,
|
||||||
|
));
|
||||||
|
|
||||||
|
$language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
|
||||||
|
$language_manager->expects($this->once())
|
||||||
|
->method('getCurrentLanguage')
|
||||||
|
->will($this->returnValue(new Language(array('id' => 'en'))));
|
||||||
|
$module_handler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
|
||||||
|
$module_handler->expects($this->once())
|
||||||
|
->method('moduleExists')
|
||||||
|
->with($module_name)
|
||||||
|
->will($this->returnValue(TRUE));
|
||||||
|
$plugin_manager = new FieldTypePluginManager(
|
||||||
|
$namespaces,
|
||||||
|
$this->getMock('Drupal\Core\Cache\CacheBackendInterface'),
|
||||||
|
$language_manager,
|
||||||
|
$module_handler
|
||||||
|
);
|
||||||
|
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
$container->set('plugin.manager.field.field_type', $plugin_manager);
|
||||||
|
// The 'string_translation' service is used by the @Translation annotation.
|
||||||
|
$container->set('string_translation', $this->getStringTranslationStub());
|
||||||
|
\Drupal::setContainer($container);
|
||||||
|
|
||||||
|
$this->definition = FieldDefinition::create($this->getPluginId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the plugin ID of the tested field type.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* The plugin ID.
|
||||||
|
*/
|
||||||
|
abstract protected function getPluginId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the path to the module's classes.
|
||||||
|
*
|
||||||
|
* Depending on whether the module follows the PSR-0 or PSR-4 directory layout
|
||||||
|
* this should be either /path/to/module/lib/Drupal/mymodule or
|
||||||
|
* /path/to/module/src.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* The path to the module's classes.
|
||||||
|
*/
|
||||||
|
abstract protected function getNamespacePath();
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue