Laravel在方法创建和存储中返回未知错误
问题描述:
我的项目出现问题我尝试将记录保存到数据库的写入方法。我创建了控制器的ProductsController,其中我添加方法:Laravel在方法创建和存储中返回未知错误
public function create(){
$articles = Article::lists('article_name', 'id');
$categories = Category::lists('category_name', 'id');
$date = Carbon::now();
$minDate = Carbon::minValue($date);
return view('pages.createproduct', compact('articles', 'categories', 'date', 'minDate'));
}
public function store(CreateProductRequest $request){
dd($request->article_name);
$product = new Product($request->all());
Auth::user()->products()->save($product);
return redirect('warehouse');
}
接下来,我创建的文件createproduct.blade.php:
{!! Form::open(['url' => 'warehouse/create', 'class' => 'form-horizontal']) !!}
{!! Form::select('article_name[]', $articles, NULL, ['class' => 'form-control']) !!}<br />
{!! Form::select('category_name[]', $categories, NULL, ['class' => 'form-control']) !!}<br />
{!! Form::text('sn', null, ['class' => 'form-control', 'placeholder' => 'Podaj serial...']) !!}<br />
{!! Form::number('quantity', null, ['class' => 'form-control', 'min' => '1', 'placeholder' => 'Podaj ilość...']) !!}<br />
{!! Form::date('warranty', $date, ['class' => 'form-control', $minDate]) !!}<br />
{!! Form::submit('Dodaj', ['class' => 'btn btn-default']); !!}
{!! Form::close() !!}
我routes.php文件文件看起来像这样:
Route::get('/contact', '[email protected]');
Route::resource('/addarticle', 'ArticlesController');
Route::resource('/addcategory', 'CategoriesController');
Route::resource('/warehouse', 'ProductsController');
Route::auth();
Route::get('/home', '[email protected]');
当我想将记录保存到数据库时,Laravel返回一个错误:
MethodNotAllowedHttpException in RouteCollection.php line 218
- in RouteCollection.php line 218
- at RouteCollection->methodNotAllowed(array('GET', 'HEAD', 'PUT', 'PATCH', 'DELETE')) in RouteCollection.php line 205
- at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD', 'PUT', 'PATCH', 'DELETE')) in RouteCollection.php line 158
- at RouteCollection->match(object(Request)) in Router.php line 821
- at Router->findRoute(object(Request)) in Router.php line 691
- at Router->dispatchToRoute(object(Request)) in Router.php line 675
- at Router->dispatch(object(Request)) in Kernel.php line 246
- at Kernel->Illuminate\Foundation\Http{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
- at Pipeline->Illuminate\Routing{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
- at CheckForMaintenanceMode->handle(object(Request), object(Closure)) at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
- at Pipeline->Illuminate\Pipeline{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
- at Pipeline->Illuminate\Routing{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
- at Pipeline->then(object(Closure)) in Kernel.php line 132
- at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
- at Kernel->handle(object(Request)) in index.php line 53
答
貌似没有对资源的路线有些混乱......
去在这里下车的图表......
/warehouse/create
会向您说明的形式路线,这是一个GET
请求。您希望存储仓库,以便表单的URL应该指向/warehouse
,并且它应该是POST
请求。
考虑到这一点,你应该改变...
{!! Form::open(['url' => 'warehouse/create', 'class' => 'form-horizontal']) !!}
到
{!! Form::open(['route' => 'warehouse.store', 'method' => 'post', 'class' => 'form-horizontal']) !!}
请注意,我也改变url
到route
,因为它是一点点的安全允许Laravel生成URL对你而言,而不是使用相对URL,如果你的路由由于某种原因而改变,或者你在另一个页面上有相同的表单,那么这些URL就很容易中断。
'php artisan route:list'对于解决这些问题是非常宝贵的。好答案。 – ceejayoz