Ergebnis 1 bis 3 von 3

Thema: Regisrierung von Models

  1. #1
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard Regisrierung von Models

    Hallo zusammen,

    ich versuche gerade meine lokale Erweiterung auf die in den Docs beschriebene Struktur korrekt umzubauen.
    Dabei hänge ich nun an den Models, die noch nicht so wirklich wollen.

    Ich habe ein Model in:
    /src/Model/ProductModel.php
    PHP-Code:
    <?php
    namespace App\Model;

    use 
    Contao\Model;

        class 
    ProductModel extends Model
        
    {
            protected static 
    $strTable 'tl_products';

            public static function 
    findByArtNo($val, array $opt=array()) {
                
    $t = static::$strTable;
                
    $objDatabase Database::getInstance();

                
    $objResult $objDatabase->prepare("SELECT * FROM $t WHERE artno=?")->execute($val);

                if (
    $objResult->numRows 1) {
                    return 
    null;
                }

                return static::
    createCollectionFromDbResult($objResult$t);
            }

        }

    ?>
    Dieses registriere ich in meiner config:
    /contao/config/config.php
    PHP-Code:
    <?php
      
    use App\Model\ProductModel;

       
    // Backend Modules
      
    array_insert($GLOBALS['BE_MOD'],1, [
        
    'modul' => array(
          
    'products' => array(
            
    'tables' => array('tl_products')//,
          
    )
        )
      ]);


      
    // Models
      
    $GLOBALS['TL_MODELS']['tl_products'] = ProductModel::class;

    ?>
    In meinem DCA /contao/dca/tl_products.php möchte ich nun auf das Model zugreifen. z.B. mit
    PHP-Code:
    $product = \ProductModel::findById(...); 
    Jedoch erhalte ich die folgende Fehlermeldung, wenn ich im Backend dann das entsprechende Modul öffne:
    HTML-Code:
    request.CRITICAL: Uncaught PHP Exception Symfony\Component\ErrorHandler\Error\ClassNotFoundError: "Attempted to load class "ProductModel" from the global namespace. Did you forget a "use" statement for "App\Model\ProductModel"?" at /var/www/vhosts/folder/var/cache/prod/contao/dca/tl_products.php line 458 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Attempted to load class \"ProductModel\" from the global namespace.\nDid you forget a \"use\" statement for \"App\\Model\\ProductModel\"? at /var/www/vhosts/folder/var/cache/prod/contao/dca/tl_products.php:458)"} []
    Im DCA habe ich es bereits mit
    PHP-Code:
    use App\Model\ProductModel
    versucht, das hat jedoch nichts gebracht.

    Wo habe ich hier etwas übersehen?

  2. #2
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard

    Hat sich schon erledigt

    Es lag am "" in
    PHP-Code:
    $product = \ProductModel::findById(...); 
    richtig muss es sein:
    PHP-Code:
    $product ProductModel::findById(...); 

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

    Standard

    Nutze den Debug-Modus und poste den Stack Trace.

    Nebenbei bemerkt solltest du dich eher an die PHP Standard Recommendations beim programmieren halten (bspw. kein ?> benutzen).

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
  •