This action only admits post requests

Hallo,

wir haben ein Plugin im Einsatz welches leider nicht mehr vom Entwickler supported wird. Seit dem Update auf 5.4 im Testsystem erhalten wir diesen Fehler:

„This action only admits post requests“

dies liegt scheinbar an folgender Funktion des Plugins, welche einen GET Aufruf erzeugt um einen Artikel dem Warenkorb hinzuzufügen:

public static function getCartAddUrl($product_id, $qty = 1, $ajax = 0){
        $url = SHOPWARE_RELATIVE_URL;
        if($product = Shopware()->Models()->find('Shopware\Models\Article\Article', $product_id)){
            if($qty <= 0)$qty = 1;
            $url .= 'checkout/addArticle/sAdd/'.$product->getMainDetail()->getNumber().'/sQuantity/'.$qty;
        }
        return $url;
    }

Lässt sich dies vielleicht relativ einfach umbauen? Ich bin da leider nicht so tief drin in diesem Thema, aber Shopware verbietet dies ja nun seit Version 5.4 mittels GET.

Vielen Dank im Vorraus

Hallo @hkdruck‍,

ich weiß nicht wo und wer benutzen sie diese url.

aber das Fehler ist klar , anderen SIe die Request Method zu POST.

VG,

 

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

@ahmadsaad‍: diese funktion wird extern benutzt und spielt somit dann ein Produkt in den Warenkorb. Das hier nun eine POST Methode genutzt werden sollte ist mir klar, aber wie lässt sich dies realisieren?

Hallo,

so wie es beispielsweise Shopware beim Legen des Artikels in den Warenkorb macht.

Grüße

Sebastian

@hkdruck‍,  kannst du das Code , das benutzen getCartAddUrl funktione posten.

wie schicken Sie jetzt die GET Request??

 

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

$eventArgs = new \Enlight_Event_EventArgs();
$eventArgs->set('id', 'SW10008');
$eventArgs->set('quantity', '1');
Shopware()->Container()->set('front', new FrontControllerMock());
$basket = new Basket(Shopware()->Container());
$result = $basket->addArticle($eventArgs);

geht das hier in die richtige Richtung?

 

@ahmadsaad schrieb:

@hkdruck‍,  kannst du das Code , das benutzen getCartAddUrl funktione posten.

wie schicken Sie jetzt die GET Request??

 

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

function bay(){
        $id = JRequest::getVar('id');
        $model = JModelLegacy::getInstance('create_product', 'ExpresseditorModel');
        $product_id = $model->buy($id);
        if ($product_id){
            $this->setRedirect(EngineHelper::getCartAddUrl($product_id));
        }
    }

hier wird auch nur weitergeleitet

Hallo ,

ob du möchstest , nur hinzfügen ein Artikel von Backend.

du kannst diese einfach machen wie so:

$basket = Shopware()->Modules()->Basket();
$basket->sAddArticle($ordernumber, $quantity);

dann redirect zu wo du möchstest.

VG,

 

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

Hallo,

das scheint nicht zu funktionieren. Ich befinde mich in dem Fall in einem externen Editor, welcher dann das editierte Produkt an den Warenkorb zurückspielen möchte. Das wurde scheinbar immer bisher mittels GET gemacht. Gibt es noch eine andere Möglichkeit? die Übertragung mittels POST durch php an dieser stelle wird Probleme mit CSRF geben, oder? 

Hallo,

ja, es wirde ein Problem mit CSRF geben.

Entschuldigung aber mit diese Info kann ich dir nicht mehr helfen, vielleicht jemand andere kann.

oder ob gibt ein demo oder ein Url , im kann sehe was ist das Logic mit Ihre Code und wie es funktionert, dann kann ich mehr Hilfe geben.

VG,

 

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/