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'