it-swarm.com.de

So definieren Sie ein optionales Argument für den Routing-Rückruf

Ich möchte eine einfache Controller-Aktion definieren, die ein optionales Argument erhält:

<?php

namespace Drupal\hello\Controller;

class SimpleCallback extends ControllerBase
{
    public function sayHiAction($name = 'there')
    {
        return new Response('Hi ' . $name, 200);
    }
}
?>

Wenn ich das Routing so definiere

# file @hello.routing.yml
hello.sayHi:
  path: '/hello/{name}'
  defaults:
    _title: 'Say Hi'
    _content: 'Drupal\hello\Controller\SimpleCallback::sayHiAction'
  requirements:
      _permission: 'access content'

ERHALTEN /hello gibt mir nur 404 Antwort.

Folgen Sie offizielle Dokumentation , ich habe meine Route aktualisiert:

# file @hello.routing.yml
hello.sayHi:
  path: '/hello/{name}'
  defaults:
    _title: 'Say Hi'
    _content: 'Drupal\hello\Controller\SimpleCallback::sayHiAction'
    custom_arg: 'there'
  requirements:
      _permission: 'access content'

Aber nichts hat sich geändert.

3
Andy Truong

Die Dokumente, die Sie verlinken, sagen:

Wenn statische Argumente an den Controller übergeben werden sollen, geben Sie diese auch im Standardarray an. Benennen Sie sie so, dass sie mit den Argumenten Ihrer Controller-Methode übereinstimmen . Siehe unten.

Hervorhebung von mir.

Ihr Code sollte also lauten:

# file @hello.routing.yml
hello.sayHi:
  path: '/hello/{name}'
  defaults: 
    _title: 'Say Hi'
    _content: 'Drupal\hello\Controller\SimpleCallback::sayHiAction'
    name: 'there'
  requirements:
      _permission: 'access content'

Siehe auch Erforderliche und optionale Platzhalter in den Symfony-Routingdokumenten.

13
Clive