Per quanto possa sembrare stranoître j’hai dovuto usare un'entità con una chiave primaria impostataésu un campo di tipo varchar, e alcuni valori contenevano un « / ».
Finché l’non siamo confrontatiéal problèio, impossibile pensare che questo possa creare un problema. E lì c’è il dramma.
An exception has been thrown during the rendering of a template ("Parameter "id" for route "admin_app_wtype_edit" must match "[^/]++" ("MACHIN/CHOSE" given) to generate a corresponding URL.").
In breve, lo slash è interpretatoétédal génératore d’URL come una sépreparatore di l’URL e questo fa bloccare il sistemaèio.
Quindi, bisogna modificare il génératore d’URL per che’lo trasforma« / »in qualcos'altro (in pratica URL codificatoé), e poi in entrée bisogna modificare il valore della chiave primaria rétazzaéréper séselezionare l’oggetto per cui’faccia la trasformazione inversa.
Nel vostro file XxxAdmin.php, aggiungete l’interfaccia :
use Symfony\Component\Routing\Generator\UrlGeneratorInterface as RoutingUrlGeneratorInterface;
Poi aggiungete le due funzioni seguenti:
public function generateUrl($name, array $parameters = [], $absolute = RoutingUrlGeneratorInterface::ABSOLUTE_PATH)
{
if(!empty($parameters['id'])){
$parameters['id'] = str_replace("/","%2F",$parameters['id']);
}
return $this->routeGenerator->generateUrl($this, $name, $parameters, $absolute);
}
public function getObject($id)
{
$id=str_replace("%2F","/",$id);
$object = $this->getModelManager()->find($this->getClass(), $id);
foreach ($this->getExtensions() as $extension) {
$extension->alterObject($this, $object);
}
return $object;
}
Adattare l’esempio alla versione installata
Gli esempi Symfony e Sonata rimangono legati alle versioni indicate nell’articolo. Symfony 4.x e Symfony 6.2 non sono più supportati: per un progetto attuale, utilizzate un ramo mantenuto e la documentazione corrispondente esattamente alle vostre dipendenze.
php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle
Prima di riprendere il codice, controllate le firme, i servizi, le rotte e i template interessati. Aggiungete poi un test funzionale che copra le autorizzazioni, il codice HTTP e il risultato visibile.
Riferimento : versioni di Symfony supportate.