# Brett vorm Kopf? Kleinbuchstaben bei URLs

**URL:** <https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029>\
**Category:** Shopware 6 (German)\
**Created:** [14. Mai 2024 um 08:08 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029 "2024-05-14T08:08:52Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [14. Mai 2024 um 08:08 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/1 "2024-05-14T08:08:52Z")

</div>

Dachte ich könnte so URLs in Kleinbuchstaben ausgeben, aber reagiert gar nicht:

```auto
{% set ServiceURL = seoUrl('frontend.navigation.page',{navigationId: data.id}) %}
{{ ServiceURL|lower }}

```

Übersehe ich etwas?

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [14. Mai 2024 um 08:22 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/2 "2024-05-14T08:22:31Z")

</div>

Die seoUrl wird seht wahrscheinlich ein Objekt und kein String sein.

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [14. Mai 2024 um 08:26 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/3 "2024-05-14T08:26:23Z")

</div>

Ne, die wird ja ganz normal angezeigt, nur eben nicht in Kleinbuchstaben. Bei einem Objekt sollte ja nichts angezeigt werden.

---

<div class="post-metadata">

**Author:** ![area-net-gmbh](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/area-net-gmbh/32/21995_2.png) [@area-net-gmbh](https://forum.shopware.com/u/area-net-gmbh)\
**Post date:** [14. Mai 2024 um 09:36 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/4 "2024-05-14T09:36:52Z")

</div>

Konnte es in einer lokalen Dockware-Umgebung und auf einem Server (Mitwald) nachstellen.

Das ist irgendein Zeichensatz-Problem mit der Methode _mb\_strtolower_, die von der Twig-Funktion aufgerufen wird. Scheinbar wird von _seoUrl_-Funktion irgendein anderer Zeichensatz zurückgegeben, daher werden die Sonderzeichen in der URL (z.B. /) nicht erkannt und die Umwandlung klappt nicht.

Übergebe ich z.B.

```auto
{% set ServiceURL = seoUrl('frontend.navigation.page',{navigationId: data.id}) %}
Klappt nicht: {{ ServiceURL|lower }}
Klappt: {{ 'http://domain/Test/'|lower }}

```

Ebenso funktioniert es, wenn ich hardcoded in der _SeoUrlFunctionExtension_ eine URL als String zurückgebe:

```auto
public function seoUrl(string $name, array $parameters = []): string
    {
       
       return 'http://domain/Test/';
       // return $this->seoUrlReplacer->generate($name, $parameters);
    }

```

Habe es jetzt mal mit verschiedenen Workarounds versucht (z.B. [convert\_encoding - Documentation - Twig - The flexible, fast, and secure PHP template engine](https://twig.symfony.com/doc/3.x/filters/convert_encoding.html)), aber bisher ohne Erfolg.

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [14. Mai 2024 um 10:01 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/5 "2024-05-14T10:01:36Z")

</div>

> [@area-net-gmbh](#):
>
> Konnte es in einer lokalen Dockware-Umgebung und auf einem Server (Mitwald) nachstellen.

Ah ok, hatte schon kurz selber an mir gezweifelt.

---

<div class="post-metadata">

**Author:** ![area-net-gmbh](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/area-net-gmbh/32/21995_2.png) [@area-net-gmbh](https://forum.shopware.com/u/area-net-gmbh)\
**Post date:** [14. Mai 2024 um 11:37 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/6 "2024-05-14T11:37:10Z")

</div>

Irgendwas passt in dem Fall an irgendeiner Stelle in der Kette der Funktions-/Filterbearbeitung in Twig/Symfony/Shopware nicht. Gebe ich folgendes an:

```auto
{% set ServiceURL = seoUrl('frontend.navigation.page',{navigationId: '018e56d3fdf776a081a44f2bfc7253aa'}) %}
{{ dump(ServiceURL) }}

```

erhalte wie erwartet ich einen String als Ausgabe

```auto
"http://localhost/Test/"

```

Wende ich einen Filter auf meine String-Rückgabe an

```auto
{{ dump(ServiceURL | split('/')) }}

```

würde ich folgendes erwarten:

```auto
array:3 [▼
  0 => "http:"
  1 => ""
  2 => "localhost"
  3 => "Test"
  4 => ""
]

```

Ausgegeben wird mir aber

```auto
array:3 [▼
  0 => "http://localhost/"
  1 => "navigation"
  2 => "018e56d3fdf776a081a44f2bfc7253aa"
]

```

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [14. Mai 2024 um 12:22 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/7 "2024-05-14T12:22:06Z")

</div>

Das wäre ja die rohe URL ohne SEO. Daher klappt wohl auch das lower nicht.

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [14. Mai 2024 um 13:37 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/8 "2024-05-14T13:37:41Z")

</div>

Warum sollte das nicht klappen, wenn das Ganze einfach nur ein String ist? In PHP würde das auch gehen. Ich kann das gegenwärtig (noch) nicht nachvollziehen.

---

<div class="post-metadata">

**Author:** ![area-net-gmbh](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/area-net-gmbh/32/21995_2.png) [@area-net-gmbh](https://forum.shopware.com/u/area-net-gmbh)\
**Post date:** [14. Mai 2024 um 13:52 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/9 "2024-05-14T13:52:55Z")

</div>

Eigentlich ist/sollte es ein String sein - aber irgendwie auch doch nicht 😉

Vielleicht habe ich morgen auf der Fahrt nach Duisburg mal Zeit und Laune die Kette der Funktions- und Filteraufrufe in Twig/Shopware mal genauer anzuschauen. Irgendwo lauert da der Fehler.

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [14. Mai 2024 um 14:28 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/10 "2024-05-14T14:28:36Z")

</div>

Wenn es ein String ist, dann klar, aber irgendwas stimmt da nicht. Interessanterweise bekomme ich folgendes bei einem upper (mit einer Produkt-URL)

```auto
"124C71D524604CCBAD6042EDCE3AC799/DETAIL/018E914BB26C72C2B72B31B047EDFC82#"

```

Die Twig-Funktion seoUrl soll einen String zurückgeben, aber das Verhalten passt vorne und hinten nicht…

```auto
class SeoUrlFunctionExtension extends AbstractExtension
{
    /**
     * @internal
     */
    public function __construct(
        private readonly RoutingExtension $routingExtension,
        private readonly SeoUrlPlaceholderHandlerInterface $seoUrlReplacer
    ) {
    }

    public function getFunctions(): array
    {
        return [
            new TwigFunction('seoUrl', $this->seoUrl(...), ['is_safe_callback' => $this->routingExtension->isUrlGenerationSafe(...)]),
        ];
    }

    public function seoUrl(string $name, array $parameters = []): string
    {
        return $this->seoUrlReplacer->generate($name, $parameters);
    }
}

```

und seoUrlReplacer-\>generate gibt einen String zurück, allerdings nicht den, den man erwarten würde…

```auto
    final public const DOMAIN_PLACEHOLDER = '124c71d524604ccbad6042edce3ac799';

    /**
     * @param string $name
     */
    public function generate($name, array $parameters = []): string
    {
        $path = $this->router->generate($name, $parameters, RouterInterface::ABSOLUTE_PATH);

        $request = $this->requestStack->getMainRequest();
        $basePath = $request ? $request->getBasePath() : '';
        $path = $this->removePrefix($path, $basePath);

        return self::DOMAIN_PLACEHOLDER . $path . '#';
    }

```

man beachte den DOMAIN\_PLACEHOLDER, das erklärt die upper-URL oben

Nachtrag: Ich habe ja den Verdacht, das die URL nachträglich per JS umgewandelt wird, kann das sein?

---

<div class="post-metadata">

**Author:** ![area-net-gmbh](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/area-net-gmbh/32/21995_2.png) [@area-net-gmbh](https://forum.shopware.com/u/area-net-gmbh)\
**Post date:** [14. Mai 2024 um 15:14 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/11 "2024-05-14T15:14:30Z")

</div>

Wenn ich das jetzt richtig interpretiere.

1. Die Twig-Funktion _seoUrl_ gibt die Zeichenkette `self::DOMAIN_PLACEHOLDER . $path . '#'` zurück
2. Alle Filter/etc. greifen auf diese Zeichenkette
3. Am Ende läuft über den ganzen Content noch die Funktion _SeoUrlPlaceholderHandler::replace_ drüber, die die richtige, contextabhhängige URL austauscht

Zum Ausgangsproblem zurück @R4M: Um das gewünschte Ergebnis zu erzielen, musst du die Klasse _SeoUrlPlaceholderHandler::replace_ (die zumindest public ist) überschreiben und dort die Kleinschreibung erzwingen. Über einen einfachen Filter ist es in dem Fall leider nicht möglich.

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [14. Mai 2024 um 16:16 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/12 "2024-05-14T16:16:11Z")

</div>

Hast Du eine Idee, warum man das so macht und nicht direkt die URL zurückgibt? Hat das was mit dem Caching zu tun?

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [15. Mai 2024 um 06:00 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/13 "2024-05-15T06:00:21Z")

</div>

Bevor ich jetzt noch Tage damit verbringe nach einer Lösung zu suchen, habe ich nun die URLs händisch eingetragen und auf diese Funktion verzichtet. Für mich ist das Thema somit erledigt. Danke aber für das Feedback!

---

<div class="post-metadata">

**Author:** ![area-net-gmbh](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/area-net-gmbh/32/21995_2.png) [@area-net-gmbh](https://forum.shopware.com/u/area-net-gmbh)\
**Post date:** [15. Mai 2024 um 09:23 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/14 "2024-05-15T09:23:54Z")

</div>

Es geht nur um die Kleinschreibung? Warum passt du nicht einfach das SEO-Template an?

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [15. Mai 2024 um 09:43 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/15 "2024-05-15T09:43:02Z")

</div>

> [@area-net-gmbh](#):
>
> Es geht nur um die Kleinschreibung?

In diesem Fall ja damit das einheitlich und sauber aussieht.

> [@area-net-gmbh](#):
>
> Warum passt du nicht einfach das SEO-Template an?

Du kennst jetzt nicht die Hintergründe, aber das ging hier nicht. Will ich jetzt auch nicht weiter erläutern und ausbauen. Ich muss bei den Projekten vorwärts kommen und will mich damit nicht länger befassen 🙂

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [15. Mai 2024 um 20:15 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/16 "2024-05-15T20:15:20Z")

</div>

> [@R4M](#):
>
> Du kennst jetzt nicht die Hintergründe, aber das ging hier nicht. Will ich jetzt auch nicht weiter erläutern und ausbauen. Ich muss bei den Projekten vorwärts kommen und will mich damit nicht länger befassen 🙂

Also mich würds mal interessieren in welchem Use-Case die SEO URL Templates nicht zum gewünschten Ergebnis führen. Alles andere macht doch garkeinen Sinn.

Du kannst den SeoUrlPlaceholderHandler neu Dekorieren/ersetzen, weil der Service auf ein Interface basiert. Aber auch in diesem Fall wären auch alle URLs klein → Selbes Resultat also.

Und wenn du die URL mit kleinen Buchstaben in die Browseradresse eingibst, wird eh auf die URL mit den großen Buchstaben umgeleitet 😃

---

<div class="post-metadata">

**Author:** ![system](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/2/9/29c7587ba660f00e4995d1743162782e5d6d8653.svg) [@system](https://forum.shopware.com/u/system)\
**Post date:** [14. Juni 2024 um 20:16 UTC](https://forum.shopware.com/t/brett-vorm-kopf-kleinbuchstaben-bei-urls/104029/17 "2024-06-14T20:16:04Z")

</div>

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.
