Ergebnis 1 bis 8 von 8

Thema: Routing & Models

  1. #1
    Contao-Nutzer Avatar von a-v-l
    Registriert seit
    20.09.2013.
    Ort
    Freiburg im Breisgau
    Beiträge
    88

    Frage Routing & Models

    Hallo zusammen,

    ich habe der Docu folgend mit Annotation eine eigene Route erstellt, die auch wunderbar funktioniert:

    PHP-Code:
    // /src/Controller/TestController.php
    namespace App\Controller;

    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;
    use 
    Symfony\Component\Routing\Annotation\Route;

    /**
     * @Route("/test/{slug}", name=TopicController::class)
     */
    class TopicController
    {
        public function 
    __invoke(string $slugRequest $request): Response
        
    {
            return new 
    Response("hallo " $slug);
        }

    Wenn ich also /test/welt aufrufe, wird "hallo welt" ausgegeben. Soweit so gut!

    Um auf die Datenbank zuzugreifen, erweitere ich den TestController (um nur ein Beispiel zu nehmen) um use Contao\ArticleModel; und lasse mir dann var_dump(ArticleModel::findById(1)); ausgeben.

    Leider bekomme ich dann immer den Fehler: The Symfony container is not available, did you initialize the Contao framework? – und zwar egal, welches Model ich verwende.

    Nach langem suchen habe ich diese Lösung mit der Doctrine\DBAL\Connection gefunden: https://community.contao.org/de/show...l=1#post555056
    Aber das ist ja keine schöne Lösung, wenn man schon eigene Models hat…

    Sollte das nicht auch eleganter gehen?

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

    Standard

    Du musst das ContaoFramework injecten und initializen.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer Avatar von a-v-l
    Registriert seit
    20.09.2013.
    Ort
    Freiburg im Breisgau
    Beiträge
    88

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du musst das ContaoFramework injecten und initializen.
    Wow, vielen Dank! (Aber wird das auch noch in Contao 5 laufen?)

    In der config/services.yml habe ich dann noch arguments: - "@contao.framework" hinzugefügt…

    Noch eine Frage: gibt es hier die Möglichkeit, die Response einem (Frontend-)Template zu übergeben? Und wo würde ich das dann einbinden?

    Danke!

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

    Standard

    Erkläre mal zuerst, was genau du machen möchtest und warum. Evt. ist ein Page Controller eigentlich das, was du machen willst? Ist aber nicht ganz trivial damit dann eine reguläre Contao Seite zu rendern.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer Avatar von a-v-l
    Registriert seit
    20.09.2013.
    Ort
    Freiburg im Breisgau
    Beiträge
    88

    Standard

    Vielen Dank für deine Unterstützung! Tatsächlich klappt das Entwickeln mit Contao immer besser, je länger man dabei ist. Trotzdem sind die vielen unterschiedlichen Symfony-Wege (Annotations, Services, Tagging etc.) manchmal etwas verwirrend – insbesondere, da jeder irgendwie einen anderen Weg einschlägt…

    Erkläre mal zuerst, was genau du machen möchtest und warum.
    Also, auf Grundlage des von mir um einige Felder erweiterten Terminal42\NodeBundles möchte ich folgendes erreichen:

    1. Unter example.com/tag/ sollen alle Nodes (bzw. jeweils ein Teaser) ausgegeben werden.
    2. Unter example.com/tag/[tag] sollen alle Nodes mit dem jeweiligen tag ausgegeben werden.
    3. Unter example.com/[?]/[slug] soll der Inhalt des Nodes mit dem jeweiligen slug ausgegeben werden. (Ob das noch ein URL-Fragment [?] rein kommt oder nicht. Und wie das aussieht, ist noch nicht entschieden.)
    4. Das Ganze soll sowohl statisch (per URL) als auch (später) dynamisch per Ajax funktionieren…

    [tag] ist EINE Eigenschaft der Nodes. Es gibt noch weitere (wie topic, oder region, etc.) für die das gleiche Spiel geplant ist. Das sind vor allem von mir eingifügte Felder, die in der Original-Erweiterung nicht vorhanden sind. [slug] ist auch so ein Feld.

    Evt. ist ein Page Controller eigentlich das, was du machen willst?
    Ja, daran hatte ich auch schon gedacht – ist mir erst nach dem Routing aufgefallen, dass es das gibt. Bin gerade noch in der Proof-of-Concept-Phase…

    Jedenfalls würde ich das gerne so integrieren, dass ich das HTML nicht jedesmal komplett selbst generieren muss, sondern irgendwie als Template einbauen kann. Gerader Punkt 3 sollte eigentlich wie eine ganz normale Seite ausgegeben werden.

    Danke für ein paar hilfreiche Kommentare!

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

    Standard

    Ich würde hier eine Kombination aus Page Controller und Frontend Modul machen: der Page Controller übernimmt das Routing und setzt entsprechende Attribute. Das Frontend Modul liest diese Attribute aus und rendert den dazu passenden Inhalt.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer Avatar von a-v-l
    Registriert seit
    20.09.2013.
    Ort
    Freiburg im Breisgau
    Beiträge
    88

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich würde hier eine Kombination aus Page Controller und Frontend Modul machen: der Page Controller übernimmt das Routing und setzt entsprechende Attribute. Das Frontend Modul liest diese Attribute aus und rendert den dazu passenden Inhalt.
    Wofür genau benötige ich eigentlich den Page Controller? Ich kann doch einfach auf der Seite example.com/tag/ ein Frontendmodul einsetzen, welches per Input::get('auto_item') den optionalen Parameter [tag] in example.com/tag/[tag] ausliest. Bei vorhandenem tag gibt er nur die entsprechenden Nodes aus. Bei nicht vorhandenem Parameter gibt er (wie gewünscht) alle Nodes aus. Easy?

    Würde ein Page Controller irgendwelche Vorteile mitbringen? Gibt es hier ein begründetes Best Practice?

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

    Standard

    Zitat Zitat von a-v-l Beitrag anzeigen
    Wofür genau benötige ich eigentlich den Page Controller? Ich kann doch einfach auf der Seite example.com/tag/ ein Frontendmodul einsetzen, welches per Input::get('auto_item') den optionalen Parameter [tag] in example.com/tag/[tag] ausliest.
    Ja, das ist der alte Weg. Aber du hattest ja spezifisch nach dem neuen Weg gefragt und wolltest richtige Controller einsetzen?
    » sponsor me via GitHub or PayPal or Revolut

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
  •