Search code examples
laravellaravel-5laravel-routinglaravelcollectivelaravel-form

UrlGenerationException: Missing required parameters for [Route: topics.update] [URI: topics/{topic}]


I'm getting this error:

Missing required parameters for [Route: topics.update] [URI: topics/{topic}]. (View: C:\xampp\htdocs\phpboards\resources\views\topics\edit.blade.php)

This is link that will take user to edit:

<a href="/boards/topics/edit/{{$topic->id}}" class="btn btn-default">Edit</a>

This is the controller for edit:

$topic = Topic::find($id);
return view('topics.edit')->with('topic', $topic);

This is the Route:

Route::get('/boards/topics/edit/{id}', 'TopicController@edit');

This is the form for edit:

<div class="container">
    {!! Form::open(['action' => 'TopicController@update', 'method' => 'POST']) !!}
        <div class="form-group">
            {{ Form::label('title', 'Title') }}
            {{ Form::text('title', $topic->topic_title, ['class' => 'form-control', 'placeholder' => 'Title of the Post']) }}
        </div>
        <div class="form-group">
            {{ Form::label('desc', 'Desc') }}
            {{ Form::textarea('desc', $topic->topic_body, ['class' => 'form-control', 'placeholder' => 'Description of the Post']) }}
        </div>
        {{ Form::submit('Submit', ['class' => 'btn btn-default']) }}
    {!! Form::close() !!}
</div>

What i have done wrong here??


Solution

  • Instead of:

    {!! Form::open(['action' => 'TopicController@update', 'method' => 'POST']) !!}
    

    use

    {!! Form::open(['url' => route('topics.update', $topic->id), 'method' => 'POST']) !!}
    

    because for your route you need to pass id of topic you want to update. Also it's more reasonable to use named routes instead Controller@method notation.