Contao-Camp 2024
Ergebnis 1 bis 4 von 4

Thema: Models und Namespaces

  1. #1
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard Models und Namespaces

    Hallo zusammen,

    leider scheitere ich momentan an der Erzeugung eines Models für das Contao 4 Bundle.

    In Schritt 1 habe ich erst einmal versucht, ohne Namespace ein Model für meine Tabelle "tl_css_toolkit" erzeugen.

    src/Model/CssToolkitModel.php
    PHP-Code:
    <?php

    class CssToolkitModel extends \Model
    {

        protected static 
    $strTable 'tl_css_toolkit';
        
    }
    Dieses Model möchte ich gerne innerhalb einer Klasse in der DCA-Erweiterung für "tl_layout" einsetzen.

    src/Resources/contao/dca/tl_layout.php
    PHP-Code:
    <?php

    $GLOBALS
    ['TL_DCA']['tl_layout']['palettes']['default'] = preg_replace(
        
    '/([;,]external)([;,])/',
        
    '$1,cssToolkit$2',
        
    $GLOBALS['TL_DCA']['tl_layout']['palettes']['default']
    );

    $GLOBALS['TL_DCA']['tl_layout']['fields']['cssToolkit'] = Array(
        
    'label'                      => &$GLOBALS['TL_LANG']['tl_layout']['cssToolkit'],
        
    'exclude'                 => true,
        
    'inputType'               => 'select',
        
    'options_callback'        => array('tl_layout_cssToolkit''layoutOptions'),
        
    'eval'                    => array('tl_class'=>'w50'),
        
    'sql'                     => "int(10) unsigned NOT NULL default 0"
    );

    class 
    tl_layout_cssToolkit
    {
        
        public function 
    layoutOptions($dc) {
            
            
    $output = Array("0" => "-");
            
    $objCssToolkits CssToolkitModel::findByPid($dc->id);
            while(
    $objCssToolkits->next()){
                
    $output[$objCssToolkits->name] = $objCssToolkits->id;
            }
            return 
    $output;
            
        }
        
    }
    Daraufhin habe ich folgende Fehlermeldung erhalten.

    Attempted to load class "CssToolkitModel" from the global namespace. Did you forget a "use" statement?
    Da ich die Klasse "CssToolkitModel" ohne Namepace (also nach meinem Verständnis global) definiert habe, verstehe ich nicht so recht, wo das Problem liegt. Da ich aber ein Use-Statement verwenden soll, gehe ich davon aus, dass Contao hier einen Namespace haben möchte.

    Daraufhin habe ich die "src/Model/CssToolkitModel.php" am Anfang des Codes um einen Namespace erweitert.
    PHP-Code:
    namespace BohnMedia\CssToolkitBundle\Model
    Am Anfang der "tl_layout.php" verwende ich "use".
    PHP-Code:
    use BohnMedia\CssToolkitBundle\Model\CssToolkitModel
    Nun werde ich in der Fehlermeldung gefragt, ob ich ein "use" statement für "BohnMedia\CssToolkitBundle\Model\CssToolkitMo del" vergessen habe.

    Attempted to load class "CssToolkitModel" from the global namespace. Did you forget a "use" statement for "BohnMedia\CssToolkitBundle\Model\CssToolkitModel" ?
    Selbst wenn ich den Namespace direkt im Funktionsaufruf angebe, bleibt die Fehlermeldung bestehen.

    PHP-Code:
    $objCssToolkits = \BohnMedia\CssToolkitBundle\Model\CssToolkitModel::findByPid($dc->id); 
    Falls jemand weiß, wie es mit Namespaces geht, wäre das großartig, da ich die Zusammenhänge anhand der Tutorials und verschiedener Gits anscheinend noch nicht ganz verstanden habe. Im Zweifel könnte ich aber auch darauf verzichten.

    Dank und Gruß
    Dennis
    Geändert von chatjack (01.08.2019 um 17:53 Uhr)

  2. #2
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard

    Über app_dev.php erhalte ich eine ClassNotFoundException.

    Uncaught PHP Exception Symfony\Component\Debug\Exception\ClassNotFoundExc eption: "Attempted to load class "CssToolkitModel" from the global namespace. Did you forget a "use" statement for "BohnMedia\CssToolkitBundle\Model\CssToolkitModel" ?" at /var/www/vhosts/office.bohn.media/test1.office.bohn.media/vendor/contao/core-bundle/src/Resources/contao/library/Contao/Model/Collection.php line 138
    Diese sollte doch eigentlich automatisch geladen werden, da der Ordner "src" über "autoload" in der composer.json geladen wird.

    Zusätzlich habe ich den Model-Ordner auch noch Mal dem Array "classmap" mitgegeben. Leider ohne Erfolg.

    Code:
    {
    	"name":"bohnmedia/css-toolkit-bundle",
    	"description":"Generate css toolkit for responsive layouts from backend",
    	"keywords":["contao","css","sass"],
    	"type":"contao-bundle",
    	"homepage":"https://github.com/bohnmedia/contao-css-toolkit-bundle",
    	"license":"MIT",
    	"authors":[
    		{
    			"name":"bohn.media",
    			"homepage":"https://bohn.media",
    			"role":"Developer"
    		}
    	],
    	"require": {
    		"contao/core-bundle":"~4.4",
            "leafo/scssphp": "^0.6 || ^0.7",
    		"menatwork/contao-multicolumnwizard": "~3.2"
    	},
        "conflict": {
            "contao/core": "*",
            "contao/manager-plugin": "<2.0 || >=3.0"
        },
        "extra": {
            "contao-manager-plugin": "BohnMedia\\CssToolkitBundle\\ContaoManager\\Plugin"
        },
    	"autoload":{
    		"psr-4": {
    			"BohnMedia\\CssToolkitBundle\\": "src/"
    		},
            "classmap": [
    			"src/Classes/",
    			"src/Model/"
    		]
    	}
    }
    Den aktuellen Stand habe ich mal ins GIT gepackt.

    https://github.com/bohnmedia/contao-css-toolkit-bundle
    Geändert von chatjack (01.08.2019 um 17:47 Uhr)

  3. #3
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard

    Ok, aufgrund der Tatsache, dass die Klasse anscheinend gar nicht geladen wurde, konnte ich mit Hilfe des folgenden Threads das Problem dann auch relativ schnell lösen.

    https://community.contao.org/de/show...FoundException

    In der "config.php" musste das Model explizit angegeben werden.

    PHP-Code:
    <?php

    $GLOBALS
    ['TL_MODELS']['tl_css_toolkit'] = "BohnMedia\\CssToolkitBundle\\Model\\CssToolkitModel";
    Jetzt klappt es auch mit Namespace.

  4. #4
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Ho!

    ich habe hier dieses "Dummy Bundle" für Contao 4: https://github.com/Sioweb/Contao4DummyBundle

    Evt. kannst du das als Basis verwenden oder herausfinden was wo wie hinterlegt sein muss, damit es funktioniert. Unter Anderem habe ich da zwei Möglichkeiten drin um Module/Klassen zu registrieren. Ab 4.4 über die config.php und ab 4.6 über Services.

    Es ist kein wirkliches Tutorial, aber du könntest es kopieren und einfach alle Namen abändern und für dich verwenden.
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

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
  •