diff --git a/core/core.services.yml b/core/core.services.yml index 71eb009..d05e4bf 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -806,7 +806,7 @@ services: - { name: event_subscriber } form_ajax_subscriber: class: Drupal\Core\EventSubscriber\FormAjaxSubscriber - arguments: ['@form_ajax_response_handler'] + arguments: ['@form_ajax_response_builder'] tags: - { name: event_subscriber } route_enhancer.lazy_collector: @@ -879,8 +879,8 @@ services: controller.entity_form: class: Drupal\Core\Entity\HtmlEntityFormController arguments: ['@controller_resolver', '@form_builder', '@entity.manager'] - form_ajax_response_handler: - class: Drupal\Core\Form\FormAjaxResponseHandler + form_ajax_response_builder: + class: Drupal\Core\Form\FormAjaxResponseBuilder arguments: ['@main_content_renderer.ajax', '@current_route_match'] router_listener: class: Symfony\Component\HttpKernel\EventListener\RouterListener diff --git a/core/lib/Drupal/Core/EventSubscriber/FormAjaxSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/FormAjaxSubscriber.php index f4cde1e..9bea727 100644 --- a/core/lib/Drupal/Core/EventSubscriber/FormAjaxSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/FormAjaxSubscriber.php @@ -9,7 +9,7 @@ use Drupal\Core\Ajax\UpdateBuildIdCommand; use Drupal\Core\Form\FormAjaxException; -use Drupal\Core\Form\FormAjaxResponseHandlerInterface; +use Drupal\Core\Form\FormAjaxResponseBuilderInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\HttpKernel\KernelEvents; @@ -25,20 +25,20 @@ class FormAjaxSubscriber implements EventSubscriberInterface { const POST_TO_ORIGINAL_URL = 'post_to_original_url'; /** - * The form AJAX handler. + * The form AJAX response builder. * - * @var \Drupal\Core\Form\FormAjaxResponseHandlerInterface + * @var \Drupal\Core\Form\FormAjaxResponseBuilderInterface */ - protected $formAjaxResponseHandler; + protected $formAjaxResponseBuilder; /** * Constructs a new FormAjaxSubscriber. * - * @param \Drupal\Core\Form\FormAjaxResponseHandlerInterface $form_ajax_response_handler - * The form AJAX handler. + * @param \Drupal\Core\Form\FormAjaxResponseBuilderInterface $form_ajax_response_builder + * The form AJAX response builder. */ - public function __construct(FormAjaxResponseHandlerInterface $form_ajax_response_handler) { - $this->formAjaxResponseHandler = $form_ajax_response_handler; + public function __construct(FormAjaxResponseBuilderInterface $form_ajax_response_builder) { + $this->formAjaxResponseBuilder = $form_ajax_response_builder; } /** @@ -60,7 +60,7 @@ public function onException(GetResponseForExceptionEvent $event) { // If the form build ID has changed, issue an Ajax command to update it. $commands[] = new UpdateBuildIdCommand($form_build_id, $form['#build_id']); } - $response = $this->formAjaxResponseHandler->buildResponse($request, $form, $form_state, $commands); + $response = $this->formAjaxResponseBuilder->buildResponse($request, $form, $form_state, $commands); // Since this response is being set in place of an exception, explicitly // mark this as a 200 status. $response->headers->set('X-Status-Code', 200); diff --git a/core/lib/Drupal/Core/Form/FormAjaxResponseHandler.php b/core/lib/Drupal/Core/Form/FormAjaxResponseBuilder.php similarity index 91% rename from core/lib/Drupal/Core/Form/FormAjaxResponseHandler.php rename to core/lib/Drupal/Core/Form/FormAjaxResponseBuilder.php index 39919a3..c8b2940 100644 --- a/core/lib/Drupal/Core/Form/FormAjaxResponseHandler.php +++ b/core/lib/Drupal/Core/Form/FormAjaxResponseBuilder.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\Core\Form\FormAjaxResponseHandler. + * Contains \Drupal\Core\Form\FormAjaxResponseBuilder. */ namespace Drupal\Core\Form; @@ -14,12 +14,12 @@ use Symfony\Component\HttpKernel\Exception\HttpException; /** - * Handles AJAX form responses. + * Builds an AJAX form response. * * Given the current request, a form render array, its form state, and any AJAX - * commands to apply to the form, generate a response object. + * commands to apply to the form, build a response object. */ -class FormAjaxResponseHandler implements FormAjaxResponseHandlerInterface { +class FormAjaxResponseBuilder implements FormAjaxResponseBuilderInterface { /** * The main content to AJAX Response renderer. @@ -36,7 +36,7 @@ class FormAjaxResponseHandler implements FormAjaxResponseHandlerInterface { protected $routeMatch; /** - * Constructs a new FormAjaxResponseHandler. + * Constructs a new FormAjaxResponseBuilder. * * @param \Drupal\Core\Render\MainContent\MainContentRendererInterface $ajax_renderer * The ajax renderer. diff --git a/core/lib/Drupal/Core/Form/FormAjaxResponseHandlerInterface.php b/core/lib/Drupal/Core/Form/FormAjaxResponseBuilderInterface.php similarity index 81% rename from core/lib/Drupal/Core/Form/FormAjaxResponseHandlerInterface.php rename to core/lib/Drupal/Core/Form/FormAjaxResponseBuilderInterface.php index 7582d8c..8822a33 100644 --- a/core/lib/Drupal/Core/Form/FormAjaxResponseHandlerInterface.php +++ b/core/lib/Drupal/Core/Form/FormAjaxResponseBuilderInterface.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\Core\Form\FormAjaxResponseHandlerInterface. + * Contains \Drupal\Core\Form\FormAjaxResponseBuilderInterface. */ namespace Drupal\Core\Form; @@ -10,9 +10,9 @@ use Symfony\Component\HttpFoundation\Request; /** - * Provides an interface for handling AJAX form responses. + * Provides an interface for building AJAX form responses. */ -interface FormAjaxResponseHandlerInterface { +interface FormAjaxResponseBuilderInterface { /** * Builds a response for an AJAX form. diff --git a/core/modules/file/src/Controller/FileWidgetAjaxController.php b/core/modules/file/src/Controller/FileWidgetAjaxController.php index 2252033..6cc1391 100644 --- a/core/modules/file/src/Controller/FileWidgetAjaxController.php +++ b/core/modules/file/src/Controller/FileWidgetAjaxController.php @@ -10,7 +10,7 @@ use Drupal\Component\Utility\NestedArray; use Drupal\Core\Ajax\AjaxResponse; use Drupal\Core\Ajax\ReplaceCommand; -use Drupal\Core\Form\FormAjaxResponseHandlerInterface; +use Drupal\Core\Form\FormAjaxResponseBuilderInterface; use Drupal\Core\Form\FormBuilderInterface; use Drupal\Core\Render\RendererInterface; use Drupal\system\Controller\FormAjaxController; @@ -39,13 +39,13 @@ class FileWidgetAjaxController extends FormAjaxController { * A logger instance. * @param \Drupal\Core\Form\FormBuilderInterface $form_builder * The form builder. - * @param \Drupal\Core\Form\FormAjaxResponseHandlerInterface $form_ajax_response_handler - * The form AJAX response handler. + * @param \Drupal\Core\Form\FormAjaxResponseBuilderInterface $form_ajax_response_builder + * The form AJAX response builder. * @param \Drupal\Core\Render\RendererInterface $renderer * The renderer. */ - public function __construct(LoggerInterface $logger, FormBuilderInterface $form_builder, FormAjaxResponseHandlerInterface $form_ajax_response_handler, RendererInterface $renderer) { - parent::__construct($logger, $form_builder, $form_ajax_response_handler); + public function __construct(LoggerInterface $logger, FormBuilderInterface $form_builder, FormAjaxResponseBuilderInterface $form_ajax_response_builder, RendererInterface $renderer) { + parent::__construct($logger, $form_builder, $form_ajax_response_builder); $this->renderer = $renderer; } @@ -56,7 +56,7 @@ public static function create(ContainerInterface $container) { return new static( $container->get('logger.factory')->get('ajax'), $container->get('form_builder'), - $container->get('form_ajax_response_handler'), + $container->get('form_ajax_response_builder'), $container->get('renderer') ); } diff --git a/core/modules/simpletest/src/WebTestBase.php b/core/modules/simpletest/src/WebTestBase.php index a206f0e..f296702 100644 --- a/core/modules/simpletest/src/WebTestBase.php +++ b/core/modules/simpletest/src/WebTestBase.php @@ -2625,7 +2625,10 @@ protected function prepareRequestForGenerator($clean_urls = TRUE, $override_serv protected function buildUrl($path, array $options = array()) { if ($path instanceof Url) { $absolute_path = clone $path; - return $absolute_path->setAbsolute()->toString(); + return $absolute_path + ->setOptions($options) + ->setAbsolute() + ->toString(); } // The URL generator service is not necessarily available yet; e.g., in // interactive installer tests. diff --git a/core/modules/system/src/Controller/FormAjaxController.php b/core/modules/system/src/Controller/FormAjaxController.php index ce64867..9f6ca98 100644 --- a/core/modules/system/src/Controller/FormAjaxController.php +++ b/core/modules/system/src/Controller/FormAjaxController.php @@ -9,7 +9,7 @@ use Drupal\Core\Ajax\UpdateBuildIdCommand; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; -use Drupal\Core\Form\FormAjaxResponseHandlerInterface; +use Drupal\Core\Form\FormAjaxResponseBuilderInterface; use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormBuilderInterface; use Drupal\system\FileAjaxForm; @@ -38,11 +38,11 @@ class FormAjaxController implements ContainerInjectionInterface { protected $formBuilder; /** - * The form AJAX response handler. + * The form AJAX response builder. * - * @var \Drupal\Core\Form\FormAjaxResponseHandlerInterface + * @var \Drupal\Core\Form\FormAjaxResponseBuilderInterface */ - protected $formAjaxResponseHandler; + protected $formAjaxResponseBuilder; /** * Constructs a FormAjaxController object. @@ -51,13 +51,13 @@ class FormAjaxController implements ContainerInjectionInterface { * A logger instance. * @param \Drupal\Core\Form\FormBuilderInterface $form_builder * The form builder. - * @param \Drupal\Core\Form\FormAjaxResponseHandlerInterface $form_ajax_response_handler - * The form AJAX response handler. + * @param \Drupal\Core\Form\FormAjaxResponseBuilderInterface $form_ajax_response_builder + * The form AJAX response builder. */ - public function __construct(LoggerInterface $logger, FormBuilderInterface $form_builder, FormAjaxResponseHandlerInterface $form_ajax_response_handler) { + public function __construct(LoggerInterface $logger, FormBuilderInterface $form_builder, FormAjaxResponseBuilderInterface $form_ajax_response_builder) { $this->logger = $logger; $this->formBuilder = $form_builder; - $this->formAjaxResponseHandler = $form_ajax_response_handler; + $this->formAjaxResponseBuilder = $form_ajax_response_builder; } /** @@ -67,7 +67,7 @@ public static function create(ContainerInterface $container) { return new static( $container->get('logger.factory')->get('ajax'), $container->get('form_builder'), - $container->get('form_ajax_response_handler') + $container->get('form_ajax_response_builder') ); } @@ -95,7 +95,7 @@ public function content(Request $request) { $this->formBuilder->processForm($form['#form_id'], $form, $form_state); - return $this->formAjaxResponseHandler->buildResponse($request, $form, $form_state, $commands); + return $this->formAjaxResponseBuilder->buildResponse($request, $form, $form_state, $commands); } /** diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php index 225664d..73d5b90 100644 --- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php +++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php @@ -10,6 +10,7 @@ use Drupal\Core\Form\FormBase; use Drupal\ajax_forms_test\Callbacks; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Url; /** * Form builder: Builds a form that triggers a simple AJAX callback. @@ -68,7 +69,12 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#type' => 'select', '#title' => $this->t('Test %key callbacks', array('%key' => $key)), '#options' => array('red' => 'red'), - '#ajax' => array('callback' => $value), + '#ajax' => array( + 'callback' => $value, + // @todo Remove this. + 'url' => Url::fromRoute('system.ajax'), + 'cache_form' => TRUE, + ), ); } diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/FormAjaxSubscriberTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/FormAjaxSubscriberTest.php index 483c677..14ce121 100644 --- a/core/tests/Drupal/Tests/Core/EventSubscriber/FormAjaxSubscriberTest.php +++ b/core/tests/Drupal/Tests/Core/EventSubscriber/FormAjaxSubscriberTest.php @@ -29,9 +29,9 @@ class FormAjaxSubscriberTest extends UnitTestCase { protected $subscriber; /** - * @var \Drupal\Core\Form\FormAjaxResponseHandlerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var \Drupal\Core\Form\FormAjaxResponseBuilderInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $formAjaxResponseHandler; + protected $formAjaxResponseBuilder; /** * @var \Symfony\Component\HttpKernel\HttpKernelInterface|\PHPUnit_Framework_MockObject_MockObject @@ -45,8 +45,8 @@ protected function setUp() { parent::setUp(); $this->httpKernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'); - $this->formAjaxResponseHandler = $this->getMock('Drupal\Core\Form\FormAjaxResponseHandlerInterface'); - $this->subscriber = new FormAjaxSubscriber($this->formAjaxResponseHandler); + $this->formAjaxResponseBuilder = $this->getMock('Drupal\Core\Form\FormAjaxResponseBuilderInterface'); + $this->subscriber = new FormAjaxSubscriber($this->formAjaxResponseBuilder); } /** @@ -61,7 +61,7 @@ public function testOnException() { $commands = []; $response = new Response(''); - $this->formAjaxResponseHandler->expects($this->once()) + $this->formAjaxResponseBuilder->expects($this->once()) ->method('buildResponse') ->with($request, $form, $form_state, $commands) ->willReturn($response); @@ -86,7 +86,7 @@ public function testOnExceptionNewBuildId() { $commands[] = new UpdateBuildIdCommand('a_new_build_id', 'the_build_id'); $response = new Response(''); - $this->formAjaxResponseHandler->expects($this->once()) + $this->formAjaxResponseBuilder->expects($this->once()) ->method('buildResponse') ->with($request, $form, $form_state, $commands) ->willReturn($response); @@ -106,7 +106,7 @@ public function testOnExceptionOtherClass() { $request = new Request(); $exception = new \Exception(); - $this->formAjaxResponseHandler->expects($this->never()) + $this->formAjaxResponseBuilder->expects($this->never()) ->method('buildResponse'); $event = new GetResponseForExceptionEvent($this->httpKernel, $request, HttpKernelInterface::MASTER_REQUEST, $exception); diff --git a/core/tests/Drupal/Tests/Core/Form/FormAjaxResponseHandlerTest.php b/core/tests/Drupal/Tests/Core/Form/FormAjaxResponseBuilderTest.php similarity index 80% rename from core/tests/Drupal/Tests/Core/Form/FormAjaxResponseHandlerTest.php rename to core/tests/Drupal/Tests/Core/Form/FormAjaxResponseBuilderTest.php index 3568dfe..ba09680 100644 --- a/core/tests/Drupal/Tests/Core/Form/FormAjaxResponseHandlerTest.php +++ b/core/tests/Drupal/Tests/Core/Form/FormAjaxResponseBuilderTest.php @@ -2,24 +2,24 @@ /** * @file - * Contains \Drupal\Tests\Core\Form\FormAjaxResponseHandlerTest. + * Contains \Drupal\Tests\Core\Form\FormAjaxResponseBuilderTest. */ namespace Drupal\Tests\Core\Form; use Drupal\Core\Ajax\AjaxResponse; use Drupal\Core\Ajax\AlertCommand; -use Drupal\Core\Form\FormAjaxResponseHandler; +use Drupal\Core\Form\FormAjaxResponseBuilder; use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormStateInterface; use Drupal\Tests\UnitTestCase; use Symfony\Component\HttpFoundation\Request; /** - * @coversDefaultClass \Drupal\Core\Form\FormAjaxResponseHandler + * @coversDefaultClass \Drupal\Core\Form\FormAjaxResponseBuilder * @group Form */ -class FormAjaxResponseHandlerTest extends UnitTestCase { +class FormAjaxResponseBuilderTest extends UnitTestCase { /** * @var \Drupal\Core\Render\MainContent\MainContentRendererInterface|\PHPUnit_Framework_MockObject_MockObject @@ -32,9 +32,9 @@ class FormAjaxResponseHandlerTest extends UnitTestCase { protected $routeMatch; /** - * @var \Drupal\Core\Form\FormAjaxResponseHandler + * @var \Drupal\Core\Form\FormAjaxResponseBuilder */ - protected $handler; + protected $formAjaxResponseBuilder; /** * {@inheritdoc} @@ -43,7 +43,7 @@ protected function setUp() { parent::setUp(); $this->renderer = $this->getMock('Drupal\Core\Render\MainContent\MainContentRendererInterface'); $this->routeMatch = $this->getMock('Drupal\Core\Routing\RouteMatchInterface'); - $this->handler = new FormAjaxResponseHandler($this->renderer, $this->routeMatch); + $this->formAjaxResponseBuilder = new FormAjaxResponseBuilder($this->renderer, $this->routeMatch); } /** @@ -61,7 +61,7 @@ public function testBuildResponseNoTriggeringElement() { $commands = []; $expected = []; - $this->assertSame($expected, $this->handler->buildResponse($request, $form, $form_state, $commands)); + $this->assertSame($expected, $this->formAjaxResponseBuilder->buildResponse($request, $form, $form_state, $commands)); } /** @@ -81,7 +81,7 @@ public function testBuildResponseNoCallable() { $commands = []; $expected = []; - $this->assertSame($expected, $this->handler->buildResponse($request, $form, $form_state, $commands)); + $this->assertSame($expected, $this->formAjaxResponseBuilder->buildResponse($request, $form, $form_state, $commands)); } /** @@ -110,7 +110,7 @@ public function testBuildResponseRenderArray() { ->with($form['test'], $request, $this->routeMatch) ->willReturn(new AjaxResponse([])); - $result = $this->handler->buildResponse($request, $form, $form_state, $commands); + $result = $this->formAjaxResponseBuilder->buildResponse($request, $form, $form_state, $commands); $this->assertInstanceOf('\Drupal\Core\Ajax\AjaxResponse', $result); $this->assertSame($commands, $result->getCommands()); } @@ -135,7 +135,7 @@ public function testBuildResponseResponse() { $this->renderer->expects($this->never()) ->method('renderResponse'); - $result = $this->handler->buildResponse($request, $form, $form_state, $commands); + $result = $this->formAjaxResponseBuilder->buildResponse($request, $form, $form_state, $commands); $this->assertInstanceOf('\Drupal\Core\Ajax\AjaxResponse', $result); $this->assertSame($commands, $result->getCommands()); } @@ -168,7 +168,7 @@ public function testBuildResponseWithCommands() { $this->renderer->expects($this->never()) ->method('renderResponse'); - $result = $this->handler->buildResponse($request, $form, $form_state, $commands); + $result = $this->formAjaxResponseBuilder->buildResponse($request, $form, $form_state, $commands); $this->assertInstanceOf('\Drupal\Core\Ajax\AjaxResponse', $result); $this->assertSame($commands_expected, $result->getCommands()); }