Question

i have created a route with a form:

    amu_404_redirect_import.admin:
      path: '/admin/config/amu_404_redirect_import/upload'
      defaults:
        _form: '\Drupal\amu_404_redirect_import\Form\Amu404RedirectImportForm'
\Amu404RedirectImportController::content'
        _title: '404 redirect Import'
      requirements:
        _permission: 'administrer AMU 404 redirection import'

if now i am creating a controller to display some content to the same page , the form is not displayed anymore

amu_404_redirect_import.admin:
  path: '/admin/config/amu_404_redirect_import/upload'
  defaults:
    _form: '\Drupal\amu_404_redirect_import\Form\Amu404RedirectImportForm'
    _controller: '\Drupal\amu_404_redirect_import\Controller\Amu404RedirectImportController::content'
    _title: '404 redirect Import'
  requirements:
    _permission: 'administrer AMU 404 redirection import'

how could i have both content displayed ?

Was it helpful?

Solution

As it mentioned in @Hudri answer it's not possible to define _form and a _controller in the same route.
I think the solution for your use case is to define only route for the controller and embed the form inside it, like the following:

amu_404_redirect_import.admin:
  path: '/admin/config/amu_404_redirect_import/upload'
  defaults:
    _controller: '\Drupal\amu_404_redirect_import\Controller\Amu404RedirectImportController::content'
    _title: '404 redirect Import'
  requirements:
    _permission: 'administrer AMU 404 redirection import'

and your controller should be something like:

namespace Drupal\ amu_404_redirect_import\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Render\Markup;

class Amu404RedirectImportController extends ControllerBase {

  public function content() {
    $myForm = $this->formBuilder()
      ->getForm('Drupal\d8_api_exp\Form\Amu404RedirectImportForm');
    $renderer = \Drupal::service('renderer');
    $myFormHtml = $renderer->render($myForm);
    // Add other markups here ....
    return [
      '#markup' => Markup::create("
                {$myFormHtml}
            "),
    ];
  }
}

OTHER TIPS

As doc states

defaults (required): Defines the default properties of a route. Provide one of the following to specify how the output is generated:

_controller
_form
_entity_view
_entity_list
_entity_form
_route

you can't list a _form and a _controller in the same routing.yml entry, only one of those keys is allowed. Either append that content via form API to your form, or render the form manually in your controller.

Licensed under: CC-BY-SA with attribution
Not affiliated with drupal.stackexchange
scroll top