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
Lesezeichen