Ergebnis 1 bis 6 von 6

Thema: C3 RC1: Gab es da Änderungen bezüglich der Namespaces?

  1. #1
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Fehler C3 RC1: Gab es da Änderungen bezüglich der Namespaces?

    Die generierte autoload.php aus der beta funktioniert bei meinen Modulen, die aus der RC1 nicht, da wird mein Namespace nach dem ersten Wort abgeschnitten.
    Darf man keine Namespaces mehr haben wie Foo\Bar ?

    Warum haben alle Module von Contao (calender, comments, faq, ...) in der autoload.php keine registrierten Namespaces obwohl in der autoload.ini alles auf true steht?
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  2. #2
    Contao-Urgestein Avatar von tril
    Registriert seit
    07.01.2010.
    Ort
    Bad Marienberg
    Beiträge
    2.939
    User beschenken
    Wunschliste

    Standard

    Jap, es wurde etwas geändert, es wird nur noch der 1. Part des NS registriert.
    Wenn deine Klasse also Foo\Bar\Class ist,
    dann ist dein NS Foo\Bar,
    aber nur Foo wird registriert.

    Hintergrund ist die Diskussion um "echte" Namespaces in Contao zu verwenden.
    https://github.com/contao/core/pull/4592

    Wenn du ohne NS "arbeiten" willst, also damit meine ich deine Klassen ohne Namespace benutzen willst darfst du nicht mehr als 1. Part im NS haben.
    Die NS in Contao haben also zukünftig folgende Form:
    <Entwickler>\[<Vendor>\[<NS>\]*]Class
    verwendet wird die Klasse unter dem Namen
    [<Vendor>\[<NS>\]*]Class

    Willst du eine Klasse im globalen NS verwenden, darf dein NS also nur noch aus einem Element bestehen, ansonsten musst du die Klasse mit NS verwenden.
    Also musst du Bar\Class, anstelle von Class verwenden, wenn du auf die Klasse Foo\Bar\Class zugreifen willst.

    https://github.com/contao/core/commi...7260382f7a8162

  3. #3
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Das Problem ist, das wenn Contao nur Foo registriert, mein Modul erstmal nicht mehr funktioniert.
    Deinem letzten Satz zu Folge müsste ich dann in der config.php statt
    PHP-Code:
        'callback' => 'Class'
    nun
    PHP-Code:
        'callback' => 'Bar\Class'
    schreiben wenn mein Modul das NS Foo\Bar hat?
    Geändert von BugBuster (10.08.2012 um 09:51 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  4. #4
    Contao-Urgestein Avatar von tril
    Registriert seit
    07.01.2010.
    Ort
    Bad Marienberg
    Beiträge
    2.939
    User beschenken
    Wunschliste

    Standard

    Genau,

    das Konzept ist, alle Module die den global NS verwenden wollen, dürfen nicht mehr als 1. NS Komponente haben, bei allen anderen wird die Verwendung des NS quasi vorziert.
    Das ist auch in Bezug auf Konflikte viel besser, weil dann das Konfliktpotential deutlich geringer ist, als wenn einfach jeder NS auf den global NS gemapped wird

    Kurzes Bsp. für die alte Logik:
    - Contao\Email -> \Email
    - terminal24\Isotope\Email -> \Email (Konflikt)
    - InfinitySoft\Avisota\Email -> \Email (Konflikt)

    Kurzes Bsp. für die neue Logik:
    - Contao\Email -> \Email
    - terminal24\Isotope\Email -> \Isotope\Email
    - InfinitySoft\Avisota\Email -> \Avisota\Email



    PS: und ja, du musst dann Bar\Class verwenden anstelle von Class

    MfG Tristan

  5. #5
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Daumen hoch

    Ich glaub ich habs nun verstanden. Nagut, dann werde ich nach dem Stammtisch heute die Module noch mal anpassen
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  6. #6
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Frage Namespace Frage (doch noch eine)

    So, vorher in einem FE Modul:

    PHP-Code:
    $this->import('ModuleBotDetection');
    $test01 $this->ModuleBotDetection->BD_CheckBotAgent(); 
    In C3 ist mein Namespace nun im FE Modul:

    PHP-Code:
    namespace BugBuster\BotDetection
    Der Import klappt jetzt nur wenn ich es so schreibe:
    PHP-Code:
    $this->import('\BotDetection\ModuleBotDetection'); 
    Jetzt habe ich aber kein Zugriff mehr drauf auf die Methode,
    PHP-Code:
    $test01 $this->ModuleBotDetection->BD_CheckBotAgent(); 
    geht nicht mehr.

    Ich habe das jetz mal so gelöst:
    PHP-Code:
    $this->import('\BotDetection\ModuleBotDetection','ModuleBotDetection'); 
    Dann gehts wieder.

    Ist das so richtig/gewollt? Andere Möglichkeiten?

    Nachtrag: Leo hat das ähnlich:
    PHP-Code:
    $this->import('Database\\Installer''Installer'); 
    Müssen hier zwei \ sein?
    Geändert von BugBuster (11.08.2012 um 17:46 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

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
  •