1
votes

I have a problem with my project I try write method which saved record to database. I created controller ProductsController wherein I added methods:

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

Next I created file 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() !!}

My routes.php file looks like this:

Route::get('/contact', 'PagesController@contact');
Route::resource('/addarticle', 'ArticlesController');
Route::resource('/addcategory', 'CategoriesController');
Route::resource('/warehouse', 'ProductsController');
Route::auth();
Route::get('/home', 'HomeController@index');

And when I when I want to save the record to the database Laravel returns an error:

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
1

1 Answers

2
votes

Looks like there is some confusion on the resource routes...

Going off the chart here... https://laravel.com/docs/5.2/controllers#restful-resource-controllers

/warehouse/create would be the route which shows you the form and it's a GET request. You want to store the warehouse so the URL of your form should point to /warehouse and it should be POST request.

With that in mind, you should change...

{!! Form::open(['url' => 'warehouse/create', 'class' => 'form-horizontal']) !!}

to

{!! Form::open(['route' => 'warehouse.store', 'method' => 'post', 'class' => 'form-horizontal']) !!}

Note that I also changed url to route because it's a little bit safer allowing Laravel to generate the URL for you rather than going with relative URLs which can easily break if your routes change for some reason or if you have this same form on another page.