# Controllermethode aus der Bootstrap aufrufen

**URL:** <https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [19. Dezember 2011 um 10:42 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517 "2011-12-19T10:42:44Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![satzmedia](https://avatars.discourse-cdn.com/v4/letter/s/779978/32.png) [@satzmedia](https://forum.shopware.com/u/satzmedia)\
**Post date:** [19. Dezember 2011 um 10:42 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/1 "2011-12-19T10:42:44Z")

</div>

Hallo Shopware-Team, Wie kann ich aus der Bootstrap.php eine Methode des Controllers aufrufen? ` class Shopware\_Plugins\_Backend\_ImportCSV\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $event = $this-\>createEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Backend\_ImportCSV', 'onGetControllerPathBackend' ); $this-\>subscribeEvent($event); $parent = $this-\>Menu()-\>findOneBy('label', 'Inhalte'); $item = $this-\>createMenuItem(array( 'label' =\> 'CSV Import', 'onclick' =\> 'openAction(\'ImportCSV\');', 'class' =\> 'ico2 money\_euro', 'active' =\> 1, 'parent' =\> $parent, 'style' =\> 'background-position: 5px 5px;' )); $this-\>Menu()-\>addItem($item); $this-\>Menu()-\>save(); return true; } public static function onGetControllerPathBackend(Enlight\_Event\_EventArgs $args) { return dirname(\_\_FILE\_\_).'/ImportCSV.php'; # Controller laden } } ` Hier gebe ich ja nur den Controller zurück. Ich würde gern einen Aufruf einer bestimmten Action in der „ImportCSV.php“ durchführen. Wie mache ich das am Besten? Viele Grüße

---

<div class="post-metadata">

**Author:** ![satzmedia](https://avatars.discourse-cdn.com/v4/letter/s/779978/32.png) [@satzmedia](https://forum.shopware.com/u/satzmedia)\
**Post date:** [21. Dezember 2011 um 12:20 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/2 "2011-12-21T12:20:51Z")

</div>

Hallo noch mal, ist so etwas einfach nicht möglich? Oder liegt’s an mir? 🙂 Viele Grüße

---

<div class="post-metadata">

**Author:** ![Heiner\_Lohaus](https://avatars.discourse-cdn.com/v4/letter/h/b5a626/32.png) [@Heiner\_Lohaus](https://forum.shopware.com/u/Heiner_Lohaus)\
**Post date:** [22. Dezember 2011 um 17:01 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/3 "2011-12-22T17:01:53Z")

</div>

Hi, kannst du vielleicht noch etwas genauer beschreiben wozu du eine Controller-Methode direkt aufrufen möchtest? Eigentlich sind ja die Controller nur für den Aufruf über den Brower bzw. den Front-Controller gedacht. Heiner

---

<div class="post-metadata">

**Author:** ![satzmedia](https://avatars.discourse-cdn.com/v4/letter/s/779978/32.png) [@satzmedia](https://forum.shopware.com/u/satzmedia)\
**Post date:** [22. Dezember 2011 um 17:40 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/4 "2011-12-22T17:40:42Z")

</div>

Klar, also habe mir ein einen Importer anhand eines Backend-Plugins gebaut. Beim Klick aus dem Backend beginnt dieser zu importieren (er ruft dabei die Methode „Import“ auf). Nun muss ich genau dieses Verhalten einem Cronjob beibringen. Der Cronjob soll jede Nacht Daten importieren. Am einfachsten dachte ich wäre es daher die Methode „Import“ aufzurufen. Wie mache ich das oder hast Du vielleicht ne andere Idee wie ich das auf die Reihe kriege? Denis

---

<div class="post-metadata">

**Author:** ![Heiner\_Lohaus](https://avatars.discourse-cdn.com/v4/letter/h/b5a626/32.png) [@Heiner\_Lohaus](https://forum.shopware.com/u/Heiner_Lohaus)\
**Post date:** [22. Dezember 2011 um 18:04 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/5 "2011-12-22T18:04:17Z")

</div>

Hi, eigentlich müsste dazu die “Import”-Methode in eine eigene Klasse ausgelagert werden. Die Controller sind ja keine Libraries/Models etc. sondern für die Application-Logic da. Ich würde aber im diesem Fall vorschlagen, dafür einen eigene CronJob anzulegen. Dazu sind folgende Schritte notwendig: 1. Eine neue Action im Controller anlegen: [quote]public function cronAction() { if($this-\>import()) { echo “Fehlgeschlagen”; } }[/quote] 2. Für diese Action die Autorisierung und den Renderer deaktvieren: [quote]public function preDispatch() { if(in\_array($this-\>Request()-\>getActionName(), array(‘cron’))) { Shopware()-\>Plugins()-\>Backend()-\>Auth()-\>setNoAuth(); Shopware()-\>Plugins()-\>Controller()-\>ViewRenderer()-\>setNoRender(); } }[/quote] 3. Dafür ein Cron-Script erstellen und diesen im Linux-CronTab hinterlegen: cron.sh ` #!/bin/sh wget -O /tmp/shopware.cron -q 'http://shopware.de/backend/import\_c\_s\_v/cron' cat /tmp/shopware.cron rm -f /tmp/shopware.cron ` Das Auslagern in einem eignen Cron hätte übrigens auch den Vorteil, dass der Shopware-Cron dadurch nicht beeinträchtigt wird. Heiner

---

<div class="post-metadata">

**Author:** ![satzmedia](https://avatars.discourse-cdn.com/v4/letter/s/779978/32.png) [@satzmedia](https://forum.shopware.com/u/satzmedia)\
**Post date:** [2. Januar 2012 um 15:53 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/6 "2012-01-02T15:53:12Z")

</div>

Hallo Heiner, Danke das hat so geklappt! Hab mir noch einen simplen Sicherheitsmechanismus eingebaut, damit nicht jeder den Cron starten kann, ansonsten alles übernommen. Frohes neues und Vielen Dank Denis

---

<div class="post-metadata">

**Author:** ![Hunt3r](https://avatars.discourse-cdn.com/v4/letter/h/ecd19e/32.png) [@Hunt3r](https://forum.shopware.com/u/Hunt3r)\
**Post date:** [31. Oktober 2013 um 15:30 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/7 "2013-10-31T15:30:38Z")

</div>

ich kann eurer Unterhaltung leider nicht ganz folgen. Im Grunde habe ich vor das gleiche zu machen: Über einen CronJob oder Script den CSV-Import für Bilder, Artikel und Kategorien zu starten. Wie könnte ich so etwas realisieren?

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [31. Oktober 2013 um 21:34 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/8 "2013-10-31T21:34:35Z")

</div>

Mein ShopwareCLI Framework kann Controller Out-of-the-box von der Kommandozeile starten: [https://github.com/shredding/ShopwareCL … er-actions](https://github.com/shredding/ShopwareCLI#execute-controller-actions)

---

<div class="post-metadata">

**Author:** ![Hunt3r](https://avatars.discourse-cdn.com/v4/letter/h/ecd19e/32.png) [@Hunt3r](https://forum.shopware.com/u/Hunt3r)\
**Post date:** [4. November 2013 um 15:32 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/9 "2013-11-04T15:32:21Z")

</div>

Hallo Christian, vielen dank für die schnelle Antwort, allerdings habe ich kein Zugriff auf die Konsole. Kennen Sie eine Möglichkeit wie ich aus dem Plugin Code (eigener Plugin) auf die Methoden der Controller Klasse Shopware\_Controllers\_Backend\_ImportExport zugreifen kann? Diese Methoden möchte ich ansteuern: - public function importImages($filePath) - public function importCategories($filePath, $extension) - protected function importArticlesCsv($filePath) Haben Sie eine Idee wie ich das realisieren kann?

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [4. November 2013 um 17:14 UTC](https://forum.shopware.com/t/controllermethode-aus-der-bootstrap-aufrufen/5517/10 "2013-11-04T17:14:29Z")

</div>

Jein, das Problem ist, dass du nicht Teil des HTTP lifecycles bist. Ich habe das im CLI Framework mit Traits gelöst, die die Standard HTTP Funktionen wrappen, so dass man sie auch ohne aufrufen kann. Da müsstest du dir den Source Code anschauen, das kann man da schon reinbauen, ist aber etwas mühselig.
