Добавление полей для создания запроса [Рюкзак для Laravel v4] - PullRequest
2 голосов
/ 03 октября 2019

Мне нужно установить значение ключа => в запросе, который передается в метод хранилища Backpack;

В v3 у меня был метод работающего хранилища, подобный такому:

public function store(StoreRequest $request) {

    $request->request->set('account_type', User::ACCOUNT_TYPE_BASIC);
    $redirect_location = parent::storeCrud($request);
    return $redirect_location;

}

, но впытаясь быть в курсе последних событий в процессе разработки, я обновляюсь до версии 4 и сталкиваюсь с проблемой добавления / удаления чего-либо в / из объекта $ request при попытке использовать методы traitStore или traitUpdate, которые рекомендованы в документации.

Это НЕ работает;

public function store(StoreRequest $request) {

    $request->request->set('account_type', User::ACCOUNT_TYPE_BASIC);
    $redirect_location = $this->traitStore();
    return $redirect_location;

}

В частности, ключ 'account_type' не включен в запрос, отправляемый в базу данных через traitStore, который использует только поля, определенные (в данном случае) методом setupCreateOperation () для этогоCrud.

Есть ли что-то, чего мне здесь не хватает, или мне нужно полностью управлять сохранением / обновлением чего-либо, где мне нужно манипулировать запросом вместо использования различных методов рюкзака crud?

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Проблема, скорее всего, в v4. getStrippedSaveRequest в нижней части этого класса намеренно удаляет этот атрибут, потому что это не зарегистрированное поле на панели CRUD

  /**
     * Returns the request without anything that might have been maliciously inserted.
     * Only specific field names that have been introduced with addField() are kept in the request.
     */
    public function getStrippedSaveRequest()
    {
        return $this->request->only($this->getAllFieldNames());
    }

Это можно исправить, добавив атрибут this как скрытыйполе на панели CRUD, например:

$this->crud->addField([
    'name' => 'account_type',
    'type' => 'hidden'
]);

Теперь поле не будет отображаться на странице, но оно будет зарегистрировано и больше не будет удалено до процесса создания.

0 голосов
/ 15 ноября 2019

store () не принимает никаких параметров, поэтому вам нужно добавить атрибут (ы) в запрос crud-> напрямую.

Также вы можете добавить поле на лету, не создаваякак скрыто в форме.

public function store()
    {

        $this->crud->request->request->add('account_type', User::ACCOUNT_TYPE_BASIC);
        $this->crud->addField(['type' => 'hidden', 'name' => 'account_type']);

        $response = $this->traitStore();

        return $response;

    }
...