Используя пакет "silvershop/core": "^3@dev"
, я расширяю класс SilverShop\Page\AccountPageController
с именем AccountPageControllerExtension
Сценарий: аутентифицированный пользователь может сохранить текущий заказ как Quote
, а затем отредактировать количествоэлементы на странице учетной записи.
При сохранении заказа в виде предложения он меняет статус заказа с Cart
на Quote
Теперь, чтобы отредактировать элементы, у меня есть QuoteForm
расширение Form
, которое вдохновлено SilverShop\Forms\CartForm
, которое отображает элементы в порядке.
Проблема заключается в отправке формы.Так как этот QuoteForm
индивидуален для каждого Order
, я не могу понять, как отправить форму.
Класс QuoteForm
class QuoteForm extends Form {
/**
* @var Order
*/
protected $quote;
public function __construct( $controller, $quoteID = null, $name = 'QuoteForm') {
if( empty($quoteID) ){
return false;
}
$this->quote = Order::get_by_id($quoteID);
$items = $this->quote->Items();
$fields = FieldList::create(
QuoteEditField::create( $items, 'Items')
->setTemplate('Shop\FormField\QuoteEditField')
->setTitle('')
);
$fields->add(HiddenField::create('QuoteID', 'QuoteID', $quoteID));
$actions = FieldList::create(
$update_action = FormAction::create('updateQuote', 'Update')
);
parent::__construct( $controller, $name, $fields, $actions );
}
public function updateQuote($data, $form){
Debug::dump($data);
return Controller::curr()->redirectBack();
}
}
Функция QuoteForm
присутствует в AccountPageControllerExtension
классе
public function QuoteForm($order_id){
$form = QuoteForm::create($this->owner, $order_id);
return $form;
}
, который вызывается в шаблоне как
<% loop $Quotes %>
... title, order date, etc..
$Up.QuoteForm($ID)
<% end_loop %>
. После отправки формы получена ошибка
[Emergency] Uncaught InvalidArgumentException: SilverStripe\Control\HTTPRequest is not a subclass of DataObject
POST /account/QuoteForm/
Line 155 in /var/www/app/vendor/silverstripe/framework/src/ORM/DataObjectSchema.php
Я предполагаю, что это происходит, потому что функция QuoteForm
принимает аргумент $order_id
, но при отправке устанавливает $order_id
как экземпляр HTTPRequest
, потому что я вижу эту строку в трассировке {Redacted}\QuoteForm->__construct(SilverShop\Page\AccountPageController, SilverStripe\Control\HTTPRequest)
Как отправить форму для каждой цитаты индивидуально?