class PluginFormFactory in Drupal 8
Same name and namespace in other branches
- 9 core/lib/Drupal/Core/Plugin/PluginFormFactory.php \Drupal\Core\Plugin\PluginFormFactory
 - 10 core/lib/Drupal/Core/Plugin/PluginFormFactory.php \Drupal\Core\Plugin\PluginFormFactory
 
Provides form discovery capabilities for plugins.
Hierarchy
- class \Drupal\Core\Plugin\PluginFormFactory implements PluginFormFactoryInterface
 
Expanded class hierarchy of PluginFormFactory
1 file declares its use of PluginFormFactory
- PluginFormFactoryTest.php in core/
tests/ Drupal/ Tests/ Core/ Plugin/ PluginFormFactoryTest.php  
1 string reference to 'PluginFormFactory'
- core.services.yml in core/
core.services.yml  - core/core.services.yml
 
1 service uses PluginFormFactory
File
- core/
lib/ Drupal/ Core/ Plugin/ PluginFormFactory.php, line 12  
Namespace
Drupal\Core\PluginView source
class PluginFormFactory implements PluginFormFactoryInterface {
  /**
   * The class resolver.
   *
   * @var \Drupal\Core\DependencyInjection\ClassResolverInterface
   */
  protected $classResolver;
  /**
   * PluginFormFactory constructor.
   *
   * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
   *   The class resolver.
   */
  public function __construct(ClassResolverInterface $class_resolver) {
    $this->classResolver = $class_resolver;
  }
  /**
   * {@inheritdoc}
   */
  public function createInstance(PluginWithFormsInterface $plugin, $operation, $fallback_operation = NULL) {
    if (!$plugin
      ->hasFormClass($operation)) {
      // Use the default form class if no form is specified for this operation.
      if ($fallback_operation && $plugin
        ->hasFormClass($fallback_operation)) {
        $operation = $fallback_operation;
      }
      else {
        throw new InvalidPluginDefinitionException($plugin
          ->getPluginId(), sprintf('The "%s" plugin did not specify a "%s" form class', $plugin
          ->getPluginId(), $operation));
      }
    }
    $form_class = $plugin
      ->getFormClass($operation);
    // If the form specified is the plugin itself, use it directly.
    if (ltrim(get_class($plugin), '\\') === ltrim($form_class, '\\')) {
      $form_object = $plugin;
    }
    else {
      $form_object = $this->classResolver
        ->getInstanceFromDefinition($form_class);
    }
    // Ensure the resulting object is a plugin form.
    if (!$form_object instanceof PluginFormInterface) {
      throw new InvalidPluginDefinitionException($plugin
        ->getPluginId(), sprintf('The "%s" plugin did not specify a valid "%s" form class, must implement \\Drupal\\Core\\Plugin\\PluginFormInterface', $plugin
        ->getPluginId(), $operation));
    }
    if ($form_object instanceof PluginAwareInterface) {
      $form_object
        ->setPlugin($plugin);
    }
    return $form_object;
  }
}Members
| 
            Name | 
                  Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| 
            PluginFormFactory:: | 
                  protected | property | The class resolver. | |
| 
            PluginFormFactory:: | 
                  public | function | 
            Creates a new form instance. Overrides PluginFormFactoryInterface:: | 
                  |
| 
            PluginFormFactory:: | 
                  public | function | PluginFormFactory constructor. |