使用软件包"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)
如何分别为每个报价单提交表格?