Как создать форму для каждого элемента объекта данных в SilverStripe - PullRequest
1 голос
/ 20 марта 2019

Используя пакет "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)

Как отправить форму для каждой цитаты индивидуально?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...