Contao-Camp 2024
Ergebnis 1 bis 9 von 9

Thema: Symfony 4 - Controller-Route aus Contao aufrufen

  1. #1
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard Symfony 4 - Controller-Route aus Contao aufrufen

    Hi,

    ich habe hier ein wahrscheinlich etwas kleineres Problem, komme aber nicht zu einer Lösung.

    Ich habe in Symfony einen Frontend-Controller, welcher mir Html generieren soll, das in einem Artikel eingebunden wird.
    Der Controller sieht wie folgt aus:

    PHP-Code:
    namespace App\Controller;

    use 
    Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use 
    Symfony\Component\Routing\Annotation\Route;
    use 
    Symfony\Component\HttpFoundation\Response;
    use 
    Twig\Environment as TwigEnvironment;

    /**
     * @Route("/test", defaults={"_scope" = "frontend"})
     */
    class FrontendController extends AbstractController
    {
        private 
    $twig;

        public function 
    __construct(TwigEnvironment $twig)
        {
            
    $this->twig $twig;
        }

        
    /**
         * @Route("/fe-test", name="fe_test")
         */
        
    public function test()
        {
            
    $res $this->twig->render(
                
    'test.html.twig',
                []
            );
            return new 
    Response($res);
        }

        
    /**
         * @Route("/irgendwas", name="fe_test2")
         */
        
    public function test2()
        {
            
    // Do sth else
        
    }


    Wenn ich diese Route in meiner Testumgebung (localhost:8000) über den Browser aufrufe, dann bekomme ich mein gerendertes Html.
    Dieses möchte ich nun in einen Artikel einbinden. Ich bin selbst nicht der größte Contao-Spezialist, deswegen ist mein Ansatz sicher etwas rudimentär.
    Ich habe in den Artikel ein Template eingebunden, welches folgendes macht:
    PHP-Code:
    echo file_get_contents('http://localhost:8000/test/fe-test'); 
    Leider funktioniert dies in meinem Contao-Artikel nicht wie im Browser und ich bekomme folgende Meldung:
    "Warning: file_get_contents(http://localhost:8000/test/fe-test): failed to open stream: HTTP request failed!".
    Was mache ich falsch bzw. wie müsste ich das gestalten, damit in meinem Artikel mein, aus dem Symfony-Backend gerendertes, Html angezeigt wird?

    Nebenbei: Der Ansatz mit der hardgecodeten URL ist natürlich nur erstmal ein Test. Hier würde mich interessieren, ob ich noch irgendeine Contao-spezifische Konstante o.ä.
    für den Hostnamen verwenden muss (Base-Url) oder ob es Contao schon reichen würde, wenn ich nur die Route selbst nehme ("/fe-test").
    Wahrscheinlich ist auch "file_get_contents" nicht der beste Weg hier den Content meiner Route zu beziehen, oder?

    Für hilfreiche Tipps wäre ich sehr dankbar!

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von buddy274 Beitrag anzeigen
    Nebenbei: Der Ansatz mit der hardgecodeten URL ist natürlich nur erstmal ein Test. Hier würde mich interessieren, ob ich noch irgendeine Contao-spezifische Konstante o.ä.
    für den Hostnamen verwenden muss (Base-Url) oder ob es Contao schon reichen würde, wenn ich nur die Route selbst nehme ("/fe-test").
    Um die URL zu einer Route zu bekommen holst du dir den Router über Dependency Injection und generierst dir damit die URL für die jeweilige Route, so wie du es schon in deinem anderen Thread gemacht hast.

  3. #3
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard

    Ok, das generieren der Route funktioniert. Ich hätte nicht erwartet, dass ich hier im Contao Context auch an Symfony Objekte rankomme.
    Das überrascht mich etwas, ist aber gut zu wissen.
    Ich hab mal das hier in meinem template versucht und er gibt mir die relative URL "/test/fe-test" aus:
    PHP-Code:
    $router $this->getContainer()->get('router');
    echo(
    $router->generate('fe_test')); 
    Dennoch kann ich diese Route nicht erfolgreich in mein Template einbauen:
    PHP-Code:
    echo file_get_contents($router->generate('fe_test')); 
    Bekomme nach wie vor den Fehler:
    "Warning: file_get_contents(/test/fe-test): failed to open stream: No such file or directory".

    Vermutlich ist es nur noch eine Kleinigkeit, die ich noch nicht verstehe /weiss...

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von buddy274 Beitrag anzeigen
    Ok, das generieren der Route funktioniert. Ich hätte nicht erwartet, dass ich hier im Contao Context auch an Symfony Objekte rankomme.
    Das überrascht mich etwas, ist aber gut zu wissen.
    Contao ist ja ein Symfony Bundle

  5. #5
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard

    Hehe, macht Sinn. Dennoch war diese Verknüpfung in meinem Kopf noch nicht vorhanden.
    Muss mich hier langsam vortasten

    Aber wie ich das Html der Route nun richtig beziehe, damit ich es in dem Artikel anzeigen kann, weisst du nicht zufällig?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Meine Vermutung wäre, dass dein lokaler Webserver keine Concurrent Requests verarbeiten kann.

    Erkläre aber lieber mal, warum du das überhaupt so machen willst. Wieso holst du in einem Controller den HTML Code eines anderen Controllers? Klingt nicht sehr sinnvoll

  7. #7
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Meine Vermutung wäre, dass dein lokaler Webserver keine Concurrent Requests verarbeiten kann.

    Erkläre aber lieber mal, warum du das überhaupt so machen willst. Wieso holst du in einem Controller den HTML Code eines anderen Controllers? Klingt nicht sehr sinnvoll
    Also du meinst, dass das eigentlich funktionieren sollte?
    Hab ich dich richtig verstanden, mein simples Template, welches nur ein "echo" machen soll, ist ein Controller?

    Unsere Motivation:
    Ich bin eher im Backend zu Hause, mache aber auch etwas Frontend. Was die Verbindung von Contao und Symfony angeht,
    ist dies mein erster Anlauf. Vermutlich habe ich da einfach noch die "falsche" Perspektive auf das Ganze.

    Unser Vorhaben ist eine Website über Contao zu bauen. Da wir aber auch noch einiges an Datenverarbeitung und etwas Business-Logik brauchen,
    wollen wir hierfür Symfony nutzen. Die Idee ist es an einigen Stellen Templates mit Twig im Backend zu generieren und diese im Frontend anzuzeigen
    bzw. in Contao einzubinden. Da wir hier viele Daten zusammen sammeln müssen und etwas Logik brauchen, erschien es uns sinnvoll,
    diese Html-Blöcke mit Twig zusammen zu bauen und dann das fertige Html einfach nur von Contao via Route einzubinden.

    Wenn man eine Web-Applikation mit Symfony baut, also nicht nur eine API-Schnittstelle die man per Ajax called,
    dann wird ja auch das gesamte Html mit Twig im Backend zusammengesetzt und ans Frontend per Route ausgeliefert.
    Ich dachte mit diesem Ansatz probiert man es auch mal mit Contao, zumindest was einzelne Code-Snippets angeht, die halt mehr indivuellen Content haben
    und zuvor noch bestimmte aggregierte Daten benötigen.

    Ausserdem wollen wir ein Backend-Modul bauen (den Ansatz dazu habe ich ja schon aus meinem vorigen Thread: https://community.contao.org/de/show...r-installieren),
    in dem der Redakteur auch einige Daten verwalten kann (CRUD-mäßig).

    Vielleicht gibt es hier noch ein elegantere Wege, aber die kenne (noch) ich leider nicht
    Vermutlich fehlen mir auch noch bestimmte Zusammenhänge, die ich noch nicht erkannt habe.

    Mal ne Gegenfrage, wie würdest du sowas implementieren?

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Es hört sich eher so an, wie wenn du ein Frontend Modul programmieren möchtest?

    Einen Controller zu bauen, um dann dessen Output mit einem Request auf den Controller in einem Template (oder wo auch immer) zu holen ist der falsche Ansatz.

  9. #9
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard

    Alles klar, danke dir Spooky!
    Ich werde mir das mit den Frontend Module nochmal genauer ansehen.
    Über die bin ich auch schon gestolpert, war mir aber nicht sicher ob das genau das ist was wir brauchen und wollte es aber erstmal so versuchen.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •