2017-10-27 3 views
1

Ich benutze Slim3 zusammen mit Twig. Wenn ich jetzt versuche, einen Link mit dem path_for Helfer in einer Zweigvorlage zu erstellen, bekomme ich nicht die vollständige URL wie https://domain.tld/path/to/something, sondern nur /path/to/something. Was vermisse ich?Slim3 + Twig> Vollständige URL für href-Links anstelle von relativen.

+0

möglich duplicate von https://stackoverflow.com/questions/17049712/how-to-use-absolute-path-in-twig-functions –

+0

glaube nicht, da dies kein Zweig Problem ist Ja wirklich. Ich denke, es ist eher ein Slim-Router-Problem. Könnte falsch sein, also ... –

Antwort

0

ich etwas habe gehackt die slim/twig-view Erweiterung es zum Laufen zu bringen. So in der TwigExtension.php habe ich

geändert
public function pathFor($name, $data = [], $queryParams = [], $appName = 'default') 
{ 
    return $this->router->pathFor($name, $data, $queryParams); 
} 

zu

public function pathFor($name, $data = [], $queryParams = [], $appName = 'default') 
{ 
    if (getenv('APP_HOST') != '') { 
     return getenv('APP_HOST') . $this->router->pathFor($name, $data, $queryParams); 
    } 
    return $this->router->pathFor($name, $data, $queryParams); 
} 

I Wette, dass es eine elegantere Möglichkeit, dies behoben. Aber derzeit behebt das mein Problem.

Dies erfordert natürlich die Verwendung einer .env-Datei zusammen mit einer Bibliothek, die die Variablen über getenv() zugänglich macht. Dafür benutze ich PHPDotenv. Du könntest das aus allen möglichen Blickwinkeln angehen, schätze ich.

Ich weiß immer noch nicht, warum @ Scriptoamy's Lösung nicht funktioniert. Es sollte wirklich. Aber in meinem Fall ist es einfach nicht ... Kommentare, wo ich vielleicht vermasselt habe, sind willkommen! :)

0

Wenn Sie die Zweig Helfer path_for wollen vielmehr die vollständige URL zurückzukehren, als nur eine absolute, müssen Sie die basePath Eigenschaft auf dem Router setzen.

Zupacken der Behälter:

$container = $app->getContainer(); 

Besorgen Sie sich die Router:

$router= $container->get('router'); 

Stellen Sie den basePath:

$router->setBasePath('https://domain.tld'); 
+0

'$ container = $ app-> getContainer(); $ router = $ container-> get ('router'); $ router-> setBasePath (getenv ('APP_HOST')); ' Das hat aus irgendeinem Grund nichts getan. Links sind immer noch relativ in der Quelle der Seite. Changed '$ container-> get ('settings')' zu '$ container-> get ('router')'. Da 'Einstellungen' nicht die setBasePath-Methode enthält. Jetzt bekomme ich keine Fehler, aber auch nichts geändert. : P –

+0

zw. _vital_ data mit einer '.env' Datei verwalten, also getenv (was funktioniert, überprüft mit var_dump). –

+0

Router ist es nicht Einstellungen, es war ein Fehler. – Scriptonomy

Verwandte Themen