2017-03-19 19 views
0

私はCRUDの例を設定するためにチュートリアルthisを続けた。しかし、私はそれを働かせることはできませんし、なぜ私は知らない。ここに私のコードは、その後、 Laravel Backpack CRUD not working

<?php 

namespace App\Http\Requests; 

use App\Http\Requests\Request; 

class SomeitemRequest extends \Backpack\CRUD\app\Http\Requests\CrudRequest 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return \Auth::check(); 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      // 'name' => 'required|min:5|max:255' 
     ]; 
    } 

    /** 
    * Get the validation attributes that apply to the request. 
    * 
    * @return array 
    */ 
    public function attributes() 
    { 
     return [ 
      // 
     ]; 
    } 

    /** 
    * Get the validation messages that apply to the request. 
    * 
    * @return array 
    */ 
    public function messages() 
    { 
     return [ 
      // 
     ]; 
    } 
} 

と、ルート

Someitem.php

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Backpack\CRUD\CrudTrait; 

class SomeItem extends Model 
{ 
    use CrudTrait; 
    // 

    protected $table = 'someitem'; 
    protected $fillable = ['nama', 'keterangan', 'harga']; 
    public $timestamps = true; 
} 

要求、SomeitemRequest.php

SomeitemCrudController.php

<?php 

namespace App\Http\Controllers\Admin; 

use Backpack\CRUD\app\Http\Controllers\CrudController; 

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

class SomeitemCrudController extends CrudController 
{ 

    public function setUp() 
    { 
     /* 
     |-------------------------------------------------------------------------- 
     | BASIC CRUD INFORMATION 
     |-------------------------------------------------------------------------- 
     */ 
     $this->crud->setModel("App\Models\Someitem"); 
     $this->crud->setRoute("admin/someitem"); 
     $this->crud->setEntityNameStrings('someitem', 'someitems'); 

     /* 
     |-------------------------------------------------------------------------- 
     | BASIC CRUD INFORMATION 
     |-------------------------------------------------------------------------- 
     */ 

     $this->crud->setFromDb(); 

     // $this->crud->setColumns(['nama']); 
     $this->crud->addField([ 
      'nama' => 'Nama', 
      'keterangan' => 'Keterangan', 
      'harga' => 'Harga' 
     ]); 
    } 

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

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

モデルであり、

<?php 

Route::group([ 
    'prefix' => config('backpack.base.route_prefix', 'admin'), 
    'middleware' => ['admin'], 
    'namespace' => 'Admin' 
], function() { 
    CRUD::resource('pelayanan', 'Admin\PelayananCrudController'); 
    Route::get('/test', function() { 
     return view('welcome'); 
    }); 
}); 

それは常に私がlaravel(およびPHP)への新たなんだエラー500

を返し、私は正常にhttp://localhost/myapp/public/admin/testにアクセスすることができますが、私はhttp://localhost/myapp/public/admin/someitemにアクセスすることができない、任意の助けが理解されます。ありがとう!

+0

なぜあなたはあなたのコントローラにaddField namaをしましたか?setFromDb()を実行して以来、それは複製されます... – Serge

答えて

1

私は非常に詳細な回答をしたいので、私は最初からそれを始めました。私が使用するバックパックCRUDのバージョンは^ 3.2です。このファイルyour-project/vendor/backpack/crud/src/CrudServiceProvider.php

  1. 見てはい、私はクラス名がCRUDしかしCrudServiceProviderではないことを知っています。それはCrudServiceProviderregisterメソッドがあり、その中ににCRUDクラスエイリアスを作る$loader->alias('CRUD', \Backpack\CRUD\CrudServiceProvider::class);があるからです。 Laravel Service ProvidersService Container、およびFacadesを使って読み込み内での動作の詳細を知る。

  2. だから我々はCRUD::resource()が実際にCrudServiceProvider::resource()を意味することを考え出したので、このメソッドを取得しました、そこにあなたはそれがFactory pattern/methodと呼ばれています(私が間違っているなら、私を修正)私の知る限りでは一行のみreturn new CrudRouter($name, $controller, $options);があります。だからCrudRouterコンストラクタ(Github)に行ってください。それを読んでください。だから、それがない基本的なことは、この

    CRUD::resource('pelayanan', 'Admin\PelayananCrudController');

の代わりにあるそれはあなたがあなたのpublic/admin/someitemをアクセスもできないと言った。この

Route::post('pelayanan/search', [ 
     'as' => 'crud.pelayanan.search', 
     'uses' => 'Admin\[email protected]', 
    ]); 

    Route::get('pelayanan/reorder', [ 
     'as' => 'crud.pelayanan.reorder', 
     'uses' => 'Admin\[email protected]', 
    ]); 

    Route::post('pelayanan/reorder', [ 
     'as' => 'crud.pelayanan.save.reorder', 
     'uses' => 'Admin\[email protected]', 
    ]); 

    Route::get('pelayanan/{id}/details', [ 
     'as' => 'crud.pelayanan.showDetailsRow', 
     'uses' => 'Admin\[email protected]', 
    ]); 

    Route::get('pelayanan/{id}/translate/{lang}', [ 
     'as' => 'crud.pelayanan.translateItem', 
     'uses' => 'Admin\[email protected]', 
    ]); 

    Route::get('pelayanan/{id}/revisions', [ 
     'as' => 'crud.pelayanan.listRevisions', 
     'uses' => 'Admin\[email protected]', 
    ]); 

    Route::post('pelayanan/{id}/revisions/{revisionId}/restore', [ 
     'as' => 'crud.pelayanan.restoreRevision', 
     'uses' => 'Admin\[email protected]', 
    ]); 

ようなものを置くと、それはので、本当ですあなたはそれのためのルートを持っていない(実際にartisan route:listとcliのルートをチェックする)。しかし、バックパックの開発者は、そうでない場合は、index(CrudController)がどのように動作するかを確認する

`Route::resource($this->name, $this->controller, $options_with_default_route_names);`. 

を呼び出すことによって、そして、それが実際に動作するはずで一つのこと(なぜ実際には知らない)、彼らはdestructor方法で余分なルートを入れました。

もう1つは、php artisan vendor:publish --provider="Backpack\Base\BaseServiceProvider"を忘れていて、ビューファイルがないため、500エラーが発生します。

ご不明な点がございましたら、お尋ねください。