2016-12-23 3 views
0

Как предлагалось here Я создал приложение/Модели/Page.php. Я добавил все свои новые поля в $fillable.Невозможно вставить/обновить новые поля в Laravel Backpack PageManager

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
use Backpack\CRUD\CrudTrait; 
use Cviebrock\EloquentSluggable\Sluggable; 
use Cviebrock\EloquentSluggable\SluggableScopeHelpers; 
use Backpack\PageManager\app\Models\Page as OriginalPageModel; 

class Page extends OriginalPageModel 
{ 
    use CrudTrait; 
    use Sluggable; 
    use SluggableScopeHelpers; 

    /* 
    |-------------------------------------------------------------------------- 
    | GLOBAL VARIABLES 
    |-------------------------------------------------------------------------- 
    */ 

    protected $table = 'pages'; 
    protected $primaryKey = 'id'; 
    public $timestamps = true; 
    // protected $guarded = ['id']; 
    protected $fillable = ['template', 'name', 'title', 'slug', 
    'content1-header', 'content1','content2-header','content2', 
    'content3-header','content3','content4-header','content4', 
    'content5-header','content5','content6-header','content6', 'extras']; 
    // protected $hidden = []; 
    // protected $dates = []; 
    protected $fakeColumns = ['extras']; 
... 
... 
} 

И создал приложение/Http/Контроллеры/Admin/PageCrudController.php же код в качестве примера.

<?php namespace App\Http\Controllers\Admin; 

use Backpack\CRUD\app\Http\Controllers\CrudController; 
use Backpack\PageManager\app\Http\Controllers\Admin\PageCrudController as OriginalPageCrudController; 
use App\PageTemplates; 

// VALIDATION: change the requests to match your own file names if you need form validation 
use Backpack\PageManager\app\Http\Requests\PageRequest as StoreRequest; 
use Backpack\PageManager\app\Http\Requests\PageRequest as UpdateRequest; 

class PageCrudController extends OriginalPageCrudController { 

    public function __construct($template_name = false) 
    { 
     /* 
     |-------------------------------------------------------------------------- 
     | BASIC CRUD INFORMATION 
     |-------------------------------------------------------------------------- 
     */ 
     $this->crud->setModel("App\Models\Page"); 
     $this->crud->setRoute(config('backpack.base.route_prefix').'/page'); 
     $this->crud->setEntityNameStrings('page', 'pages'); 

     /* 
     |-------------------------------------------------------------------------- 
     | COLUMNS 
     |-------------------------------------------------------------------------- 
     */ 

     $this->crud->addColumn('name'); 
     $this->crud->addColumn([ 
           'name' => 'template', 
           'type' => 'model_function', 
           'function_name' => 'getTemplateName', 
           ]); 
     $this->crud->addColumn('slug'); 

     /* 
     |-------------------------------------------------------------------------- 
     | FIELDS 
     |-------------------------------------------------------------------------- 
     */ 

     // In PageManager, 
     // - default fields, that all templates are using, are set using $this->addDefaultPageFields(); 
     // - template-specific fields are set per-template, in the PageTemplates trait; 


     /* 
     |-------------------------------------------------------------------------- 
     | BUTTONS 
     |-------------------------------------------------------------------------- 
     */ 
     $this->crud->addButtonFromModelFunction('line', 'open', 'getOpenButton', 'beginning'); 
    } 

    public function store(StoreRequest $request) 
    { 
     return parent::storeCrud(); 
    } 

    public function update(UpdateRequest $request) 
    { 
     return parent::updateCrud(); 
    } 
} 

и модифицирована приложение/PageTemplates.php

... 
... 
    private function page() 
    { 
     $this->crud->addField([ // CustomHTML 
         'name' => 'metas_separator', 
         'type' => 'custom_html', 
         'value' => '<br><h2>Metas</h2><hr>', 
        ]); 
    ... 
    ... 
     $this->crud->addField([ // CustomHTML 
         'name' => 'content_separator', 
         'type' => 'custom_html', 
         'value' => '<br><h2>Content</h2><hr>', 
        ]); 
     $this->crud->addField([ 
         'name' => 'content1-header', 
         'label' => 'Content 1 Header', 
         'type' => 'text', 
         'placeholder' => 'Your content here', 
        ]); 
     $this->crud->addField([ 
         'name' => 'content1', 
         'label' => 'Content 1', 
         'type' => 'wysiwyg', 
         'placeholder' => 'Your content here', 
        ]); 
     $this->crud->addField([ 
         'name' => 'content2-header', 
         'label' => 'Content 2 Header', 
         'type' => 'text', 
         'placeholder' => 'Your content here', 
        ]); 
     $this->crud->addField([ 
         'name' => 'content2', 
         'label' => 'Content 2', 
         'type' => 'wysiwyg', 
         'placeholder' => 'Your content here', 
        ]); 
     $this->crud->addField([ 
         'name' => 'content3-header', 
         'label' => 'Content 3 Header', 
         'type' => 'text', 
         'placeholder' => 'Your content here', 
        ]); 
     $this->crud->addField([ 
         'name' => 'content3', 
         'label' => 'Content 3', 
         'type' => 'wysiwyg', 
         'placeholder' => 'Your content here', 
        ]); 
... 
... 

Однако это не обновить или вставить данные. Что я здесь делаю неправильно?

ответ

2

Философия, лежащая в основе PageManager, заключается в том, чтобы хранить все, что характерно для шаблона, внутри столбца «Дополнительные» в базе данных, как JSON. Не внутри своей колонки. Таким образом, вам не нужно иметь столбцы в таблице, которые удовлетворяют только одному шаблону.

Если вы:

  • удалить хранилище() и Update() методы в вашем PageCrudController;
  • удалить Content1-заголовок ' 'Content1', 'Content2-заголовок', 'Content2', 'content3-заголовок', 'content3', 'content4-заголовок', 'content4', ' content5-заголовок », 'content5', 'content6-заголовок', 'content6' из вашего массива $ нефтеналивной

  • добавить эти атрибуты в каждой из этих областей в ваших PageTemplates:

       'fake'  => true, 
           'store_in' => 'extras', 
    

Вы должны достичь именно это:

  • поля будут отображаться в формах создания/редактирования;
  • их значения будут храниться в столбце «Дополнительные»;

Я полагаю, что это не работает сейчас, потому что вы расширены PageCrudController, да, но вы перезаписали методы, которые «делают это особенным» - хранить и обновлять. Надеюсь, поможет.

+0

Ага, поэтому мне не нужно было создавать Admin/PageCrudController.php и Models/Page.php. Мне просто нужно было добавить 'fake' => true, 'store_in' => 'extras', to PageTemplates. Благодарю. – shin

+0

Yup :-) Контроллер и модель были только в том случае, если вы хотели что-то изменить в них. Извините, забыл упомянуть об этом. – tabacitu

+0

Я знаю, что инструкции не были ясны, поэтому я немного их изменил, спасибо. Ура! – tabacitu

 Смежные вопросы

  • Нет связанных вопросов^_^