Hallo, versuche folgendermaßen eine ID zu übergeben. Das funktioniert zwar, aber nicht so, wie beabsichtigt- Durch den Aufruf https://tklustig.de/getSeoUrl/5 bekomme ich die Idee. Die URL sollte allerdings so aufgerufen werden: https://tklustig.de/getSeoUrl?id=5
Wie mache ich es richtig?
Hier der Controller Code und die service.xml
#[Route(defaults: ['_routeScope' => ['storefront']])]
class SeoUrlController extends StorefrontController
{
#[Route(path: '/getSeoUrl/{id}', name: 'frontend.seourl', methods: ['GET','POST'])]
public function showExample(Request $request, SalesChannelContext $context,int $id): Response
{
dd($id);
return $this->renderStorefront('@WtCreateSeoUrl/storefront/page/example.html.twig', [
'example' => 'Hello world'
]);
}
}
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="WtCreateSeoUrl\Storefront\Controller\SeoUrlController" public="true">
<call method="setContainer">
<argument type="service" id="service_container"/>
</call>
<call method="setTwig">
<argument type="service" id="twig"/>
</call>
</service>
</services>
</container>
P.S.: Durch letzteren Aufruf bekomme ich die Exception: NO ROUTE FOUND, im ersten ergibt der var_dump 5
Muss ich neben der Methodensignatur die Route ändern, oder nicht? Max_shop schrieb, ich solle sie weglassen, chamwaw ging erst gar nicht darauf ein. Ich denke mal, die Route muss so bleiben, denn sonst kann der Request doch erst gar nicht korrekt verarbeitet werden,oder?
Du benötigst ja irgendeine Route. Mein „weglassen“ hat sich auf das {id} bezogen, da Symfony sonst einen Wert in der URL erwartet.
Du rufst ihn aber nicht darüber ab, sondern über das $id = $request->get(‚id‘);
Das wäre der RoutePath: /getSeoUrl
Und das $id musst du natürlich als Parameter aus der function Deklaration entfernen, da die Variable nicht mehr in der Route, sondern erst innerhalb der Funktion erstellt wird.
Wenn Du die Url so aufrufen möchtest
/getSeoUrl/[hier_eine_id]
dann ist die Route halt /getSeoUrl/{id}
Oder halt /getSeoUrl?id=[hier_eine_id]
dann wäre halt die Route nur " /getSeoUrl" die Request Parameter müssen dann NICHT in der Route angegeben werden.