Ich hab ein einfaches Problem, aber anscheinend gibt es dazu noch keinen Forenbeitrag.
Ich möchte einfach nur innerhalb von einem Shopwareplugin mit der Datenbank connecten. Ich hab die normale Syntax von PHP und SQLi benutzt aber irgendwie funktioniert das nicht so wirklich.
Hier mein Quellcode:
subscribeEvent(
'Enlight_Controller_Action_PostDispatchSecure_Frontend',
'onFrontendPostDispatch',
'connectSQL'
);
$this->createConfig();
return true;
}
private function createConfig()
{
//Configuration in the Plugin Manager goes here
$form = $this->Form();
$form->setElement(
'text',
'host_cf',
array(
'label' => 'Host',
'value' => 'localhost',
'description' => 'Type your Host URL in here',
'required' => true
)
);
$form->setElement(
'text',
'user_cf',
array(
'label' => 'Username',
'description' => 'Type your Username in here',
'required' => true
)
);
$form->setElement(
'text',
'password_cf',
array(
'label' => 'Password',
'description' => 'Type your Password in here',
'required' => true
)
);
$form->setElement(
'text',
'db_cf',
array(
'label' => 'DB Name',
'description' => 'Type your Database Name in here',
'required' => true
)
);
}
public function onFrontendPostDispatch(Enlight_Event_EventArgs $args)
{
/** @var \Enlight_Controller_Action $controller */
$controller = $args->get('subject');
$view = $controller->View();
$view->addTemplateDir(
__DIR__. '/Views'
);
}
public function connectSQL()
{
$con = mysqli_connect($host_cf, $user_cf, $password_cf, $db_cf);
if (mysqli_connect_errno())
{
echo "Failed to connect to Database";
} else {
echo "Success";
}
}
}
Die Problematik ist hauptsächlich, dass ich nicht ganz verstehe, wie ich was abrufe. Ich möchte die Werte aus den textfeldern in der config benutzen als variablen für die mysqli_connect.
Außerdem verstehe ich trotz mehrfachen Lesen der Documentation nicht wie ich mit der onFrontendDispatch umgehen soll und wofür ich diese benötige.
Wäre toll, wenn mir da jemand einen kurzen Einblick geben könnte,
brauchst Du explizit eine neue DB-Verbindung? Das sollte eigentlich nur der Fall sein wenn Du Dich zu einer anderen Maschine/DB als der die Shopware nutzt verbindest. Und selbst dann solltest Du nicht die Methode mysqli_connect nutzen (die ist veraltet) sondern PDO (http://php.net/manual/de/book.pdo.php).
Sollte Dir auch eine Verbindung zur DB von Shopware reichen kannst Du Dir einfach das entsprechende Objekt aus dem Dependency Injection Container holen:
Bzgl. onFrontendDispatch: Der Name der Methode ist eigentlich egal, relevant ist der Name des Events auf dass Du Dich registrierst (in Deinem Fall hier “Enlight_Controller_Action_PostDispatchSecure_Frontend”), das legt fest zu welchem Zeitpunkt innerhalb des Quellcodes von Shopware Dein Code ausgeführt wird.
Ah okey vielen Dank. Ja ich muss in der Tat nur auf die Shopwaredatenbank zugreifen und möchte diese dann per SQL verändern/auslesen etc.
Eine Frage hätte ich dann aber noch: Gibt es eine Möglichkeit über echo/alert() zu testen, ob diese PDO Verbindung erfolgreich war? Einfach so ne art console.log() für php und im shopware plugin
Also ich hab jetzt das versucht so wie beschrieben, aber es ist wirklich extrem umständlich sich mit dieser syntax auszukennen, da sowas wie ein
CREATE TABLE example
sich als extrem kompliziert herausstellt für mich in dieser DBAL library. Ich kenne mich schon in PHP und SQL aus, aber irgendwie finde ich nicht die nötige Dokumentation um mich wirklich sicher fortzubewegen in der Plugin entwicklung. Habe ich vielleicht eine gewisse Dokumentation übersehen, in der das ausführlich erklärt wird wie man mit dieser Library und SQL/phpMyAdming arbeitet?
Wenn du aber mal die Vorteile vom DBAL erkannt hast, möchtest du es nicht mehr missen. Schau dir mal das SearchBundle an. Eine Query wird hier durch verschiedenste Stellen zusammengebastelt. Jede Klasse (auch Plugins) kann dann z.B. ein select/where/join hinzufügen, ohne kompliziert via str_replace oder ähnliches das SQL-Statement manipulieren zu müssen.
Wenn du aber mal die Vorteile vom DBAL erkannt hast, möchtest du es nicht mehr missen. Schau dir mal das SearchBundle an. Eine Query wird hier durch verschiedenste Stellen zusammengebastelt. Jede Klasse (auch Plugins) kann dann z.B. ein select/where/join hinzufügen, ohne kompliziert via str_replace oder ähnliches das SQL-Statement manipulieren zu müssen.
und ich das leider nirgendwo auf der von dir oben verlinkten Documentation seite finde.
Außerdem habe ich momentan noch keinerlei Anhaltspunkt, ob mein Skript funktionert, bzw. wieso es nicht funktioniert. Es ist sehr frustrierend code zu debuggen bei dem man nicht weiß wo der Fehler liegt
Tut mir Leid für all diese Fragen, aber ich versuche da wirklich einen Durchblick zu bekommen
Naja PDO ist nicht Doctrine DBAL. PDO ist eine Library von PHP selbst. Da liegt die Dokumentation dann hier: PHP: PDO - Manual
Die hatte dir aber @hsoebbing bereits oben verlinkt.
und ich das leider nirgendwo auf der von dir oben verlinkten Documentation seite finde.
Dann hast du sie dir nicht genau angesehen. Das steht in Kapitel 4. Die execute-Funktion gibt die ein Objekt vom Typ PDO_Statement zurück.
Sorry aber beim Lesen der Doku können wir dir nicht helfen Ich weiß, am Anfang ist das kompliziert, aber da hilft alles nichts. Jeder fängt mal damit an