Laravel Backpack CRUD не работает

Я последовал за этот учебник по настройке примера CRUD. Но я не могу заставить его работать, и я не знаю почему. вот мой код

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;
}
}

модель, 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

<?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 [
//
];
}
}

а затем, маршруты

<?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');
});
});

я могу получить доступ http://localhost/myapp/public/admin/test успешно, но я не могу получить доступ http://localhost/myapp/public/admin/someitem всегда возвращаю ошибку 500

Я новичок в Laravel (и PHP), любая помощь приветствуется. Спасибо!

0

Решение

Я хочу сделать мой ответ очень подробным, поэтому я начал его с самого начала. Я использую версию рюкзака CRUD ^ 3.2.

  1. посмотрите на этот файл your-project/vendor/backpack/crud/src/CrudServiceProvider.php
    Да, я знаю, что имя класса не CRUD но CrudServiceProvider, Это потому что они имеют register метод в CrudServiceProvider и в этом они делают $loader->alias('CRUD', \Backpack\CRUD\CrudServiceProvider::class); что делает CRUD псевдоним класса CrudServiceProvider, Чтобы узнать больше о том, как это работает внутри, прочитайте Laravel Поставщики услуг, Сервисный контейнер а также Фасады.

  2. Итак, мы выяснили, что CRUD::resource() на самом деле означает CrudServiceProvider::resource(), так что перейдите к этому методу, там вы найдете только одну строку return new CrudRouter($name, $controller, $options); насколько я знаю (если я не прав, поправьте меня) это называется Заводская модель / метод. Так что иди в CrudRouter конструктор (Github). Прочитайте это. Таким образом, основная вещь, которую он делает, вместо этого

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

это будет что-то вроде этого

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

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

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

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

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

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

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

Вы сказали, что вы не можете получить доступ к вам public/admin/someitem и это правда, потому что у вас нет маршрута для него (на самом деле проверьте маршруты в artisan route:list). Но разработчики Backpack сделали одну вещь (на самом деле не знаю почему), они добавили дополнительные маршруты в деструктор метод по вызову

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

И на самом деле это должно работать, если это не так, проверьте, как index (CrudController) ведет себя.

Еще одна вещь, может быть, вы забыли php artisan vendor:publish --provider="Backpack\Base\BaseServiceProvider" и у вас нет файлов для просмотра, и поэтому вы получаете 500 ошибок.

Если у вас есть еще вопросы, просто спросите.

1

Другие решения

Других решений пока нет …