3 namespace Drupal\devel_generate\Form;
5 use Drupal\Component\Plugin\PluginManagerInterface;
6 use Drupal\Core\Form\FormBase;
7 use Drupal\Core\Form\FormStateInterface;
8 use Drupal\devel_generate\DevelGenerateException;
9 use Symfony\Component\DependencyInjection\ContainerInterface;
12 * Defines a form that allows privileged users to generate entities.
14 class DevelGenerateForm extends FormBase {
17 * The manager to be used for instantiating plugins.
19 * @var \Drupal\Component\Plugin\PluginManagerInterface
21 protected $develGenerateManager;
24 * Constructs a new DevelGenerateForm object.
26 * @param \Drupal\Component\Plugin\PluginManagerInterface $devel_generate_manager
27 * The manager to be used for instantiating plugins.
29 public function __construct(PluginManagerInterface $devel_generate_manager) {
30 $this->develGenerateManager = $devel_generate_manager;
36 public static function create(ContainerInterface $container) {
38 $container->get('plugin.manager.develgenerate')
45 public function getFormId() {
46 return 'devel_generate_form_' . $this->getPluginIdFromRequest();
50 * Returns the value of the param _plugin_id for the current request.
52 * @see \Drupal\devel_generate\Routing\DevelGenerateRouteSubscriber
54 protected function getPluginIdFromRequest() {
55 $request = $this->getRequest();
56 return $request->get('_plugin_id');
60 * Returns a DevelGenerate plugin instance for a given plugin id.
62 * @param string $plugin_id
63 * The plugin_id for the plugin instance.
65 * @return \Drupal\devel_generate\DevelGenerateBaseInterface
66 * A DevelGenerate plugin instance.
68 public function getPluginInstance($plugin_id) {
69 $instance = $this->develGenerateManager->createInstance($plugin_id, array());
76 public function buildForm(array $form, FormStateInterface $form_state) {
77 $plugin_id = $this->getPluginIdFromRequest();
78 $instance = $this->getPluginInstance($plugin_id);
79 $form = $instance->settingsForm($form, $form_state);
80 $form['actions'] = array('#type' => 'actions');
81 $form['actions']['submit'] = array(
83 '#value' => $this->t('Generate'),
84 '#button_type' => 'primary',
93 public function validateForm(array &$form, FormStateInterface $form_state) {
94 $plugin_id = $this->getPluginIdFromRequest();
95 $instance = $this->getPluginInstance($plugin_id);
96 $instance->settingsFormValidate($form, $form_state);
102 public function submitForm(array &$form, FormStateInterface $form_state) {
104 $plugin_id = $this->getPluginIdFromRequest();
105 $instance = $this->getPluginInstance($plugin_id);
106 $instance->generate($form_state->getValues());
108 catch (DevelGenerateException $e) {
109 $this->logger('DevelGenerate', $this->t('Failed to generate elements due to "%error".', array('%error' => $e->getMessage())));
110 drupal_set_message($this->t('Failed to generate elements due to "%error".', array('%error' => $e->getMessage())));