我有一个问题与我的项目,我尝试写方法保存记录到数据库。我创建了控制器ProductsController,其中我添加了方法:
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', 'PagesController@contact');
Route::resource('/addarticle', 'ArticlesController');
Route::resource('/addcategory', 'CategoriesController');
Route::resource('/warehouse', 'ProductsController');
Route::auth();
Route::get('/home', 'HomeController@index');
当我当我想保存记录到数据库Laravel返回一个错误:
RouteCollection.php第218行
- 在RouteCollection.php第218行
- at RouteCollection-> methodnotalallowed (array('GET', 'HEAD', 'PUT'),'PATCH', 'DELETE'))在RouteCollection.php第205行
- 在RouteCollection->getRouteForMethods(对象(请求),数组('GET','HEAD', 'PUT', 'PATCH', 'DELETE'))在RouteCollection.php行158
- at RouteCollection->match(object(Request)) in Router.php第821行
- at Router->findRoute(object(Request)) in Router.php第691行
- at Router->dispatchToRoute(object(Request)) in Router.php行675
- at Router->dispatch(object(Request)) in Kernel.php第246行
- at Kernel->IlluminateFoundationHttp{closure}(object(Request)) at在Pipeline.php中调用call_user_func(object(Closure), object(Request)线52
- at Pipeline->IlluminateRouting{closure}(object(Request)) inCheckForMaintenanceMode.php第44行
- CheckForMaintenanceMode ->处理(对象(请求),对象(关闭)(CheckForMaintenanceMode中的call_user_func_array(数组(对象),'handle'), array(object(Request), object(Closure))第136行
- at Pipeline->IlluminatePipeline{closure}(object(Request)) at在Pipeline.php中调用call_user_func(object(Closure), object(Request)第32行
- at Pipeline->IlluminateRouting{closure}(object(Request)) at在Pipeline.php中调用call_user_func(object(Closure), object(Request)第102行
- at Pipeline->then(object(Closure)) in Kernel.php行132
- at Kernel->sendRequestThroughRouter(object(Request)第99行
- at Kernel->handle(object(Request)) in index.php第53行
看起来资源路由有些混乱…
在这里离开图表…https://laravel.com/docs/5.2/controllers restful-resource-controllers
/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很容易中断。