diff --git a/core/lib/Drupal/Core/HtmlFormController.php b/core/lib/Drupal/Core/HtmlFormController.php
index 5cd0712..f5075e9 100644
--- a/core/lib/Drupal/Core/HtmlFormController.php
+++ b/core/lib/Drupal/Core/HtmlFormController.php
@@ -2,7 +2,7 @@
/**
* @file
- * Definition of Drupal\Core\HtmlPageController.
+ * Contains \Drupal\Core\HtmlFormController.
*/
namespace Drupal\Core;
@@ -40,7 +40,7 @@ public function setContainer(ContainerInterface $container = NULL) {
/**
* Controller method for generic HTML form pages.
*
- * @param Request $request
+ * @param \Symfony\Component\HttpFoundation\Request $request
* The request object.
* @param callable $_form
* The name of the form class for this request.
@@ -49,23 +49,33 @@ public function setContainer(ContainerInterface $container = NULL) {
* A response object.
*/
public function content(Request $request, $_form) {
- $form_state = array();
-
- $args = $request->attributes->get('_form_arguments');
-
- $form_state['build_info']['args'] = $args ?: array();
-
// @todo Add the ability for forms to have a factory method just like
- // controllers. See http://drupal.org/node/1915774#comment-7140912.
- // @todo We could probably make it possible to wire up a form as a service,
- // too, but that may not be a common use case.
- $form = new $_form;
+ // controllers. See http://drupal.org/node/1915774#comment-7140912.
+ // If this is a class, instantiate it.
+ if (class_exists($_form)) {
+ $form_arg = new $_form();
+ }
+ // Otherwise, it is a service.
+ else {
+ $form_arg = $this->container->get($_form);
+ }
- $form_id = _drupal_form_id($form, $form_state);
- $form_result = drupal_build_form($form_id, $form_state);
+ // Using reflection, find all of the parameters needed by the form in the
+ // request attributes, skipping $form and $form_state.
+ $attributes = $request->attributes->all();
+ $reflection = new \ReflectionMethod($form_arg, 'buildForm');
+ $params = $reflection->getParameters();
+ $args = array();
+ foreach (array_splice($params, 2) as $param) {
+ if (array_key_exists($param->name, $attributes)) {
+ $args[] = $attributes[$param->name];
+ }
+ }
+ $form_state['build_info']['args'] = $args;
- $response = new Response(drupal_render_page($form_result));
-
- return $response;
+ $form_id = _drupal_form_id($form_arg, $form_state);
+ $form = drupal_build_form($form_id, $form_state);
+ return new Response(drupal_render_page($form));
}
+
}
diff --git a/core/modules/system/lib/Drupal/system/Form/MaintenanceModeForm.php b/core/modules/system/lib/Drupal/system/Form/MaintenanceModeForm.php
index ba4d1de..419aabd 100644
--- a/core/modules/system/lib/Drupal/system/Form/MaintenanceModeForm.php
+++ b/core/modules/system/lib/Drupal/system/Form/MaintenanceModeForm.php
@@ -1,38 +1,28 @@
$config->get('message'),
);
- return system_config_form($form, $form_state);
+ return parent::buildForm($form, $form_state);
}
/**
- * Form validation handler.
- *
- * @param array $form
- * An associative array containing the structure of the form.
- * @param array $form_state
- * An associative array containing the current state of the form.
- */
- public function validateForm(array &$form, array &$form_state) {}
-
- /**
- * Form submission handler.
- *
- * @param array $form
- * An associative array containing the structure of the form.
- * @param array $form_state
- * An associative array containing the current state of the form.
+ * Overrides \Drupal\system\SystemConfigFormBase::submitForm().
*/
public function submitForm(array &$form, array &$form_state) {
config_context_enter('config.context.free');
@@ -76,5 +51,7 @@ public function submitForm(array &$form, array &$form_state) {
->set('enabled', $form_state['values']['maintenance_mode'])
->set('message', $form_state['values']['maintenance_mode_message'])
->save();
+
+ return parent::submitForm($form, $form_state);
}
}
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 479a5a4..0e2748c 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -849,7 +849,6 @@ function system_menu() {
'title' => 'Maintenance mode',
'description' => 'Take the site offline for maintenance or bring it back online.',
'page callback' => 'NOT_USED',
- 'file' => 'system.admin.inc',
'weight' => -10,
);
$items['admin/config/development/performance'] = array(
diff --git a/core/modules/system/tests/modules/condition_test/condition_test.routing.yml b/core/modules/system/tests/modules/condition_test/condition_test.routing.yml
index 96fbdca..d242511 100644
--- a/core/modules/system/tests/modules/condition_test/condition_test.routing.yml
+++ b/core/modules/system/tests/modules/condition_test/condition_test.routing.yml
@@ -1,6 +1,6 @@
condition_test_1:
pattern: '/condition_test'
defaults:
- _controller: '\Drupal\condition_test\FormController::getForm'
+ _form: '\Drupal\condition_test\FormController'
requirements:
_access: 'TRUE'
diff --git a/core/modules/system/tests/modules/condition_test/lib/Drupal/condition_test/FormController.php b/core/modules/system/tests/modules/condition_test/lib/Drupal/condition_test/FormController.php
index 03b918e..2c36a2f 100644
--- a/core/modules/system/tests/modules/condition_test/lib/Drupal/condition_test/FormController.php
+++ b/core/modules/system/tests/modules/condition_test/lib/Drupal/condition_test/FormController.php
@@ -30,12 +30,11 @@ public function getFormID() {
}
/**
- * Provides a simple method the router can fire in order to invoke this form.
+ * Constructs a new \Drupal\condition_test\FormController object.
*/
- public function getForm() {
+ public function __construct() {
$manager = new ConditionManager(drupal_container()->getParameter('container.namespaces'));
$this->condition = $manager->createInstance('node_type');
- return drupal_get_form($this);
}
/**
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/BreakLockForm.php b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/BreakLockForm.php
index f8167e1..d826c9b 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/BreakLockForm.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/BreakLockForm.php
@@ -45,19 +45,6 @@ public function __construct(EntityManager $entity_manager, TempStoreFactory $tem
}
/**
- * Creates a new instance of this form.
- *
- * @param \Drupal\views\ViewStorageInterface $view
- * The view being acted upon.
- *
- * @return array
- * The built form array.
- */
- public function getForm(ViewStorageInterface $view) {
- return drupal_get_form($this, $view);
- }
-
- /**
* Implements \Drupal\Core\Form\FormInterface::getFormID().
*/
public function getFormID() {
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/DeleteForm.php b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/DeleteForm.php
index 3f38679..f9b7272 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/DeleteForm.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/DeleteForm.php
@@ -16,19 +16,6 @@
class DeleteForm implements FormInterface {
/**
- * Creates a new instance of this form.
- *
- * @param \Drupal\views\ViewStorageInterface $view
- * The view being acted upon.
- *
- * @return array
- * The built form array.
- */
- public function getForm(ViewStorageInterface $view) {
- return drupal_get_form($this, $view);
- }
-
- /**
* Implements \Drupal\Core\Form\FormInterface::getFormID().
*/
public function getFormID() {
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/SettingsFormBase.php b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/SettingsFormBase.php
index fba4fa1..0848040 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/SettingsFormBase.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/SettingsFormBase.php
@@ -7,7 +7,6 @@
namespace Drupal\views_ui\Form;
-use Drupal\Core\Config\ConfigFactory;
use Drupal\system\SystemConfigFormBase;
/**
@@ -24,22 +23,9 @@
/**
* Constructs a \Drupal\views_ui\Form\SettingsFormBase object.
- *
- * @param \Drupal\Core\Config\ConfigFactory $config_factory
- * The factory for the temp store object.
- */
- public function __construct(ConfigFactory $config_factory) {
- $this->config = $config_factory->get('views.settings');
- }
-
- /**
- * Creates a new instance of this form.
- *
- * @return array
- * The built form array.
*/
- public function getForm() {
- return drupal_get_form($this);
+ public function __construct() {
+ $this->config = drupal_container()->get('config.factory')->get('views.settings');
}
}
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewsUiBundle.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewsUiBundle.php
index 9c16c0b..d15cd0f 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewsUiBundle.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewsUiBundle.php
@@ -24,10 +24,6 @@ public function build(ContainerBuilder $container) {
->addArgument(new Reference('plugin.manager.entity'))
->addArgument(new Reference('views.views_data'))
->addArgument(new Reference('user.tempstore'));
- $container->register('views_ui.form.basic_settings', 'Drupal\views_ui\Form\BasicSettingsForm')
- ->addArgument(new Reference('config.factory'));
- $container->register('views_ui.form.advanced_settings', 'Drupal\views_ui\Form\AdvancedSettingsForm')
- ->addArgument(new Reference('config.factory'));
$container->register('views_ui.form.breakLock', 'Drupal\views_ui\Form\BreakLockForm')
->addArgument(new Reference('plugin.manager.entity'))
->addArgument(new Reference('user.tempstore'));
diff --git a/core/modules/views/views_ui/views_ui.routing.yml b/core/modules/views/views_ui/views_ui.routing.yml
index dfb53ca..74cf32a 100644
--- a/core/modules/views/views_ui/views_ui.routing.yml
+++ b/core/modules/views/views_ui/views_ui.routing.yml
@@ -15,14 +15,14 @@ views_ui.add:
views_ui.settings.basic:
pattern: '/admin/structure/views/settings'
defaults:
- _controller: 'views_ui.form.basic_settings:getForm'
+ _form: 'Drupal\views_ui\Form\BasicSettingsForm'
requirements:
_permission: 'administer views'
views_ui.settings.advanced:
pattern: '/admin/structure/views/settings/advanced'
defaults:
- _controller: 'views_ui.form.advanced_settings:getForm'
+ _form: 'Drupal\views_ui\Form\AdvancedSettingsForm'
requirements:
_permission: 'administer views'
@@ -58,7 +58,7 @@ views_ui.clone:
views_ui.delete:
pattern: '/admin/structure/views/view/{view}/delete'
defaults:
- _controller: 'Drupal\views_ui\Form\DeleteForm::getForm'
+ _form: 'Drupal\views_ui\Form\DeleteForm'
requirements:
_permission: 'administer views'
@@ -104,7 +104,7 @@ views_ui.preview:
views_ui.breakLock:
pattern: '/admin/structure/views/view/{view}/break-lock'
defaults:
- _controller: 'views_ui.form.breakLock:getForm'
+ _form: 'views_ui.form.breakLock'
display_id: NULL
requirements:
_permission: 'administer views'