我按照this教程设置了一个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)的新手,感谢任何帮助 . 谢谢!
1 回答
我想让我的答案非常详细,所以这就是我从一开始就开始的原因 . 我使用的CRUD背包的版本是^ 3.2 .
看看这个文件
your-project/vendor/backpack/crud/src/CrudServiceProvider.php
是的我知道类名不是CRUD
而是CrudServiceProvider
. 那是因为他们在CrudServiceProvider
中有register
方法,并且在其中它们执行$loader->alias('CRUD', \Backpack\CRUD\CrudServiceProvider::class);
,这使CRUD
类别为CrudServiceProvider
. 通过阅读Laravel Service Providers,Service Container和Facades了解更多内容 .所以我们已经发现
CRUD::resource()
实际上意味着CrudServiceProvider::resource()
,所以得到这个方法,据我所知你会发现只有一行return new CrudRouter($name, $controller, $options);
(如果我'm wrong correct me) it'被称为Factory pattern/method . 那么去CrudRouter
构造函数(Github) . 阅读通过它 . 所以它所做的基本事情不是这个CRUD::resource('pelayanan', 'Admin\PelayananCrudController');
它会放这样的东西
你说你无法访问你
public/admin/someitem
并且's true, because you don' t有路由(实际上用artisan route:list
检查cli中的路由) . 但是背包开发者做了一件事(实际上并不知道为什么)他们通过调用在destructor方法中添加了额外的路由并且它应该实际工作,如果不是,检查
index
(CrudController)的行为 .还有一件事你可能忘了
php artisan vendor:publish --provider="Backpack\Base\BaseServiceProvider"
而且你不知道为什么你会得到500错误 .如果您有更多问题,请询问 .