Contao-Camp 2024
Ergebnis 1 bis 12 von 12

Thema: auch Verständnisfragen zur 4.9 Entwicklung..

  1. #1
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    326

    Standard auch Verständnisfragen zur 4.9 Entwicklung..

    Hallo,

    auch ich versuche, mich in die neue Struktur (s. Doku https://docs.contao.org/dev/getting-...g-development/) einzuarbeiten.

    Bisher habe ich für C4.4 ein lokales Bundle erstellt und darin in Resources/contao/ im Prinzip alles wie in C3 gemacht (was funktioniert hat)

    Da der Weg allem Anschein nach nicht mehr recommended ist, wollte ich mich an 'mehr Symfony' wagen und habe mittels der Anleitung auch ein Content Element und ein Frontend-Modul als Controller zum Laden gebracht. ABER mir ist in keiner Weise klar, was ich wie in meine Controller 'reinschreiben' kann.

    Ich schreibe also kein Contao-Modul mehr, sondern einen Symfony Controller, der aber ein Contao Modul generiert?! Kann / muss ich also jeglichen über Jahre angewendeten Contao-Framework-Code über Bord werfen & mich komplett in Symfony einarbeiten (sofort) oder kann ich in den Controllern (wie?) auch noch Contao-Code verwenden?

    [Einfaches Beispiel: wie mache ich eine Datenbankabfrage in einem Modul/ Controller?]

    Danke für Tipps & Grüße!

    [Dass die Funktion __invoke() ungefähr das macht was in Contao die generate() macht und getResponse() ungefähr das was compile() macht, habe ich bereits herausgefunden]
    Geändert von tlnewbie (10.08.2020 um 13:58 Uhr)

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

    Standard

    Zitat Zitat von tlnewbie Beitrag anzeigen
    [Einfaches Beispiel: wie mache ich eine Datenbankabfrage in einem Modul/ Controller?]
    PHP-Code:
    // src/Controller/ContentElement/ExampleElementController.php
    namespace App\Controller\ContentElement;

    use 
    Contao\ContentModel;
    use 
    Contao\CoreBundle\Controller\ContentElement\AbstractContentElementController;
    use 
    Contao\CoreBundle\ServiceAnnotation\ContentElement;
    use 
    Contao\Template;
    use 
    Doctrine\DBAL\Connection;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;

    /**
     * @ContentElement(category="text")
     */
    class ExampleElementController extends AbstractContentElementController
    {
        private 
    $db;

        public function 
    __construct(Connection $db)
        {
            
    $this->db $db;
        }

        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): ?Response
        
    {
            
    $newsRecords $this->db->executeQuery("SELECT * FROM tl_news")->fetchAll();

            if (!empty(
    $newsRecords)) {
                
    // Do something …
            
    }

            return 
    $template->getResponse();
        }


  3. #3
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    326

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    PHP-Code:
    // src/Controller/ContentElement/ExampleElementController.php
    namespace App\Controller\ContentElement;

    use 
    Contao\ContentModel;
    use 
    Contao\CoreBundle\Controller\ContentElement\AbstractContentElementController;
    use 
    Contao\CoreBundle\ServiceAnnotation\ContentElement;
    use 
    Contao\Template;
    use 
    Doctrine\DBAL\Connection;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;

    /**
     * @ContentElement(category="text")
     */
    class ExampleElementController extends AbstractContentElementController
    {
        private 
    $db;

        public function 
    __construct(Connection $db)
        {
            
    $this->db $db;
        }

        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): ?Response
        
    {
            
    $newsRecords $this->db->executeQuery("SELECT * FROM tl_news")->fetchAll();

            if (!empty(
    $newsRecords)) {
                
    // Do something …
            
    }

            return 
    $template->getResponse();
        }

    Vielen Dank erstmal! Finde ich das (Doku) nun also nur noch bei Symfony? D.h. das Contao Framework (bis auf dca etc) wird (auf Dauer) 'entsorgt'? (Sehr schade..)

    Könnte man zur Not irgendwie auch parallel noch die alte Struktur verwenden?

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

    Standard

    Zitat Zitat von tlnewbie Beitrag anzeigen
    Vielen Dank erstmal! Finde ich das (Doku) nun also nur noch bei Symfony? D.h. das Contao Framework (bis auf dca etc) wird (auf Dauer) 'entsorgt'? (Sehr schade..)
    Was genau verstehst du unter "Contao Framework"? Manche Dinge sind deprecated, ja, andere nicht. Nenne Beispiele.


    Zitat Zitat von tlnewbie Beitrag anzeigen
    Könnte man zur Not irgendwie auch parallel noch die alte Struktur verwenden?
    Welche alte Struktur genau? Was möchtest du machen?

  5. #5
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    326

    Standard

    Ok, berechtigte Frage - wahrscheinlich verstehe ich einfach noch zuwenig.

    Melde mich nochmal dazu.

  6. #6
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Hallo tlnewbie

    Vielleicht hilft dir diese Erweiterung.
    markocupic/contao-bundle-creator-bundle

    Damit kannst du aus dem Backend raus einen Kickstart für ein contao bundle erstellen. Im Moment kann die Erweiterung ein Frontend-Modul, ein Backend-Modul und einen Custom Controller generieren. Die generierten Anwendungen sind nach einem Durchlauf von composer update voll lauffähig.

    Ich musste die letzten Wochen ganz vielen, zu Contao 3 Zeiten geschriebenen Code für contao 4.9 fit machen. Das Modul hat mir dabei ganz viel Arbeit abgenommen ;-) ... als es einmal geschrieben war.

    Liebe Grüsse

    Marko
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  7. #7
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    326

    Standard

    @ markocupic: Deinen BundleCreator hatte ich - ebenso wie Dein DummyBundle - tatsächlich bereits instaliert ;-))

    Da ich hier aber lokale Anpassungen im src Ordner mache, habe ich den Weg erstmal wieder verworfen bzw. wollte mich erstmal durch die Doku 'kämpfen'.

    @Spooky: im Prinzip blicke ich jetzt glaube ich etwas mehr durch (noch lange nicht wirklich, aber es ist ein Anfang).

    Nun wollte ich ein FrontendWidget erstellen und habe mich hier https://docs.contao.org/dev/framework/widgets/ dran gehalten.

    Da fehlt aber noch was - zumindest sehe ich mein Widget nur im Backend (Formulargenerator) & auch dort nur 'halb'. Ergänzend zu den Schritten im genannten Link habe ich noch eine tl_form_field.php in /Contao/dca geladen, um die verfügbaren Felder zu definieren. Das wird mir dort auch alles angezeigt, nur eine Frontendausgabe gibt es nicht & auch in der Backend-Auflistung der Formularfelder sehe ich bei meinem FormField nichts (bei Textfeldern steht dort name, Typ usw.). Fehlt dazu vielleicht etwas in der services.yml - dort werden ja die Controller bekannt gemacht. (oder sonstwo?)
    EDIT: muss ich den Pfad src\Contao bzw. App\Contao also dort erstmal 'bekannt machen'? Oder hab ich was anderes übersehen?

    Und Widgets landen im Ordner src\Contao (das hat mich zunächst irritiert) und haben keine eigenen Symfony-Controller o.ä. (wie FrontendModule & ContentElemente) - oder folgt das (später, C5) noch?

    Schönen Abend!
    Geändert von tlnewbie (10.08.2020 um 20:14 Uhr)

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

    Standard

    Zitat Zitat von tlnewbie Beitrag anzeigen
    Da fehlt aber noch was - zumindest sehe ich mein Widget nur im Backend (Formulargenerator) & auch dort nur 'halb'. Ergänzend zu den Schritten im genannten Link habe ich noch eine tl_form_field.php in /Contao/dca geladen, um die verfügbaren Felder zu definieren. Das wird mir dort auch alles angezeigt, nur eine Frontendausgabe gibt es nicht & auch in der Backend-Auflistung der Formularfelder sehe ich bei meinem FormField nichts (bei Textfeldern steht dort name, Typ usw.). Fehlt dazu vielleicht etwas in der services.yml - dort werden ja die Controller bekannt gemacht. (oder sonstwo?)
    Widgets erzeugst du noch im alten Stil, also du kannst keine Services für Widgets verwenden.



    Zitat Zitat von tlnewbie Beitrag anzeigen
    Und Widgets landen im Ordner src\Contao (das hat mich zunächst irritiert)
    Wo du deine PHP Klassen ablegst bzw. in welchem Namespace ist komplett dir überlassen. Es gibt diesbezüglich nur Empfehlungen. Siehe https://docs.contao.org/dev/guides/namespaces/
    Den Widget Artikel muss ich aber dahingehen aktualisieren, da der Namespace App\Contao demnach nicht "richtig" wäre
    Geändert von Spooky (10.08.2020 um 22:14 Uhr)

  9. #9
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    326

    Standard

    Den Widget Artikel muss ich aber dahingehen aktualisieren, da der Namespace App\Contao demnacht nicht "richtig" wäre
    da habe ich auch kurz gehangen, aber aus dem Pfad /src/Controller wird ja auch der Namespace App\Controller (was soweit ich es verstanden habe auch schon andere irritiert hat) - warum ist dann src/Contao => App\Contao nicht richtig? / Wie wäre er denn richtig?

    Danke!

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

    Standard

    Zitat Zitat von tlnewbie Beitrag anzeigen
    warum ist dann src/Contao => App\Contao nicht richtig? / Wie wäre er denn richtig?
    Nein, ich meinte weil wir hier https://docs.contao.org/dev/guides/n...es/#namespaces den Namespace App\Widget vorschlagen, aber dann hier https://docs.contao.org/dev/framework/widgets/ den Namespace App\Contao\BackEndWidget bzw. App\Contao\FrontEndWidget vorschlagen.
    Geändert von Spooky (11.08.2020 um 10:04 Uhr)

  11. #11
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    326

    Standard

    Und ich habe das jetzt auch so gemacht und dann gesehen, dass ich den Namespace in der config.php nicht richtig angegeben hatte - nun wird auch das Widget geladen!

  12. #12
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    326

    Standard

    Hut ab in jedem Fall für die Doku!!

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
  •