Wert in Controller auslesen

Hallo, 

ich habe ein Controller erstellt.

Diesen kann ich auffrufen über example.de/frontend/Test und dort führt er die indexAction() auf. Soweit alles ok.

Was muss ich machen, damit man zum Beispiel example.de/frontend/Test/123 aufrufen kann, also 123 ist ein variabler Wert, es könnte auch 321 sein.

Ich hoffe ich habe mich korrekt ausgedrückt.  Ich suche keine function 123Action(), sondern will den Wert abfangen und verarbeiten.

Danke und Gruss.

Habe jetzt das hier rausgefunden:   example.de/frontend/Test/id/123/

Test steht für testAction() und wenn ich in der URL erweitere mit id/123/ wird das als [id => “123”] verarbeitet.

    public function testAction()
    {
        $params = $this->Request()->getParams();
        print_r($params);
     }

 

:slight_smile:

$id = $this->Request()->getParam('id');

 

1 „Gefällt mir“

Vielen Dank für den super Tipp. @R4M‍

Noch eine Frage bzgl. Sicherheit. Ist das denn sicher vor SQL-Injections? Ich nutze PDO prepared Statements innerhalb der Action und frage mich ob das sicher ist …mhhh.

Danke und Gruss

Also ich gehe jetzt davon ganz fest aus, denn dies ist ja auch die übliche Methode in Plugins bzw. Shopware macht es selber so.

1 „Gefällt mir“

Moin @brettvormkopp‍,

wenn du konsequent und richtig prepared Statements nutzt, bist du da auf der sicheren Seite.

Liebe Grüße,
Shopware Patrick Stahl

1 „Gefällt mir“

Was wären denn unrichtige prepared Statements [@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl „Patrick Stahl“)‍  ?

Aktuell nutze ich die so:

$query = "SELECT * FROM xyz WHERE id = :id";
$conn = $pdo->prepare($query);
$conn->bindValue(......)

oder so:

$conn = $pdo->prepare("SELECT * FROM xyz WHERE id = :id");
$conn->bindValue(......)

 

Moin @brettvormkopp‍,

sorry, war leider letzte Woche unpässlich.

Deine beiden Beispiele sind im Prinzip das Gleiche und beide okay so.
„Unrichtige prepared statements“ sind quasi „garkeine prepared statements“ - häufig sehe ich einen Mix aus „korrektem prepared statement“ und dann wurde doch eine Injection eingebaut, bspw. wie folgt:

SELECT *
FROM XYZ
WHERE foo = :bar
LIMIT $test

Da ist das foo = :bar korrekt , aber direkt eine Zeile später wird dann doch eine Variable direkt ins Query gesetzt und damit eine Injection ermöglicht.

Lieben Gruß,
Shopware Patrick Stahl

1 „Gefällt mir“