Переопределить представления CRUD

Я хотел бы переопределить представления CRUD пакета CRUD Laravel Backpack, потому что я хочу внести небольшие изменения в макет. Но, очевидно, я не хочу менять сам пакет CRUD. Есть ли элегантный, чтобы сделать это?

4 ответа

Решение

Перед загрузкой любых видов, Backpack for Laravel проверяет ваш resources/views/vendor/backpack/crud папка, чтобы увидеть, если у вас есть какие-либо пользовательские представления. Если вы этого не сделаете, он просто загрузит представления в пакете.

Если вы хотите перезаписать блейд-файл для всех CRUDS, вы можете просто поместить файл с правильным именем в нужную папку. Посмотрите, как файлы организованы в пакете.

Если вы хотите перезаписать блейд-файл только для одного CRUD, используйте решение Sachin.

В вашем контроллере, который расширяется Backpack\CRUD\app\Http\Controllers\CrudController вам нужно переопределить метод, такой как index, создать, редактировать, который вы хотите изменить. Весь метод

Backpack\CRUD\app\Http\Controllers\CrudController

Все методы здесь. Вам нужно изменить здесь

 public function index()
{
    $this->crud->hasAccessOrFail('list');

    $this->data['crud'] = $this->crud;
    $this->data['title'] = ucfirst($this->crud->entity_name_plural);

    // get all entries if AJAX is not enabled
    if (! $this->data['crud']->ajaxTable()) {
        $this->data['entries'] = $this->data['crud']->getEntries();
    }

    // load the view from /resources/views/vendor/backpack/crud/ if it exists, otherwise load the one in the package
    // $this->crud->getListView() returns 'list' by default, or 'list_ajax' if ajax was enabled
    return view('your_view_name', $this->data);
}

Найден способ, даже не требующий переопределения метода index(), просто используйте $this->crud->setListView() в методе установки вашего CrudController, например:

$this->crud->setListView('backpack::crud.different_list', $this->data);

таким образом, он получит представление в '/resources/views/vendor/backpack/crud/different_list.blade.php' вместо стандартного в пакете.

Помимо setListView(), также доступны setEditView(), setCreateView(), setUpdateView().... Надеюсь, поможет.

Вы можете обратиться к https://laravel-backpack.readme.io/docs/crud-full-api для получения более подробной информации.

// use a custom view for a CRUD operation
$this->crud->setShowView('your-view');
$this->crud->setEditView('your-view');
$this->crud->setCreateView('your-view');
$this->crud->setListView('your-view');
$this->crud->setReorderView('your-view');
$this->crud->setRevisionsView('your-view');
$this->crud->setRevisionsTimelineView('your-view');
$this->crud->setDetailsRowView('your-view');

На самом деле есть лучший способ для более новых версий рюкзака (^версия 5x). Скопировано непосредственно из документации: Overriding Show Operation

Если вам нужно значимо изменить логику показа, вы можете создать метод show() в своем EntityCrudController. Тогда маршрут будет указывать на ваш метод, а не на тот, что указан в трейте. Например:

      use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation { show as traitShow; }

public function show($id)
{
    // custom logic before
    $content = $this->traitShow($id);
    // cutom logic after
    return $content;
}

Затем просто сделайте свои обычные вещи laravel, например, верните представление:

      return view('entity.show', ['data' => $data]);
Другие вопросы по тегам