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

  1. in RouteCollection.php line 218
  2. at RouteCollection->methodNotAllowed(array('GET', 'HEAD', 'PUT', 'PATCH', 'DELETE')) in RouteCollection.php line 205
  3. at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD', 'PUT', 'PATCH', 'DELETE')) in RouteCollection.php line 158
  4. at RouteCollection->match(object(Request)) in Router.php line 821
  5. at Router->findRoute(object(Request)) in Router.php line 691
  6. at Router->dispatchToRoute(object(Request)) in Router.php line 675
  7. at Router->dispatch(object(Request)) in Kernel.php line 246
  8. at Kernel->Illuminate\Foundation\Http{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
  9. at Pipeline->Illuminate\Routing{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
  10. 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
  11. at Pipeline->Illuminate\Pipeline{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
  12. at Pipeline->Illuminate\Routing{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
  13. at Pipeline->then(object(Closure)) in Kernel.php line 132
  14. at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
  15. 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']) !!} 

请注意,我也改变urlroute,因为它是一点点的安全允许Laravel生成URL对你而言,而不是使用相对URL,如果你的路由由于某种原因而改变,或者你在另一个页面上有相同的表单,那么这些URL就很容易中断。

+0

'php artisan route:list'对于解决这些问题是非常宝贵的。好答案。 – ceejayoz