Search code examples
phplaravellaravel-5laravel-5.3

Laravel MethodNotAllowedHttpException when i try to save fields?


Hi i try to save fields in db ot 2 steps but i have MethodNotAllowedHttpException

on step 1 in my controller i save the 2 fields in db

 public function storeNumber(Request $request){

    $number = new Number;
    $number->user_id = $user = \Auth::user()->id;
    $number->number = $this->getGeneratedNumber();
    $number = new Number($request->all());
    $number->save();
    return redirect('numbers/{id}/details');
}

view

<form class="form-horizontal" method="POST" action="{{action('NumberController@storeNumber')}}">
{{ csrf_field() }}

<div class="form-group">
    <div class="col-md-12">
        <button type="submit" class="btn btn-primary btn-block">
            Generate Numbers
        </button>
    </div>
</div>

model

 class Number extends Model

{ /** * @var array * */ protected $fillable = [ 'number' ]; }

on step 2 i want to save another field in same db with same controller this is my another store function for store another fields in same db . but when i try to save laravel say MethodNotAllowedHttpException.

public function store(Request $request, $id){

    $number = Number::find($id);
    $number = new Number($request->all());
    $number->save();
    return redirect('numbers');
}

this is my view

<form method="post" action="{{action('NumberController@store', $id)}}">
    {{csrf_field()}}
    <input name="_method" type="hidden" value="PATCH">

    <div class="form-group">
        <label for="number" class="control-label">Number</label>
        <input type="text" class="form-control form-control-lg disabled" placeholder="Number" name="number" value="{{$number->number}}">
    </div>
    <div class="form-group">
        <label for="comment" class="control-label">Comment</label>
        <textarea name="comment" class="form-control form-control-lg" cols="30" rows="10">{{$number->comment}}</textarea>
    </div>
    <div class="form-group">
        <label for="accept" class="control-label">Accept</label>
        <input type="radio" name="accept" value="1">Yes<br>
        <input type="radio" name="accept" value="0">No<br>
    </div>
    @if($number->accept == 1)
        <div class="form-group">
            <label for="name" class="control-label">Number</label>
            <input type="text" class="form-control form-control-lg disabled" placeholder="Name" name="name" value="{{$number->name}}">
        </div>
        <div class="form-group">
            <label for="city" class="control-label">City</label>
            <input type="text" class="form-control form-control-lg" placeholder="City" name="city" value="{{$number->city}}">
        </div>
        <div class="form-group">
            <label for="postcode" class="control-label">Postcode</label>
            <input type="number" class="form-control form-control-lg" placeholder="Postcode" name="postcode" value="{{$number->postcode}}">
        </div>
        <div class="form-group">
            <label for="address">Address</label>
            <textarea name="address" class="form-control form-control-lg" cols="30" rows="10">{{$number->address}}</textarea>
        </div>
    @else
        <p>TODO status for NO</p>
    @endif
    <div class="form-group">
        <div class="col-md-12">
            <button type="submit" class="btn btn-default">Finish</button>
        </div>
    </div>
</form>

Solution

  • You have a "_method" filed with "PATCH" value, so you have to change the route to "patch" instead of "post".