Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

johny1983's avatar

Missing required parameters for [Route: admin.news.edit] [URI: admin/about/news/{news}/edit]. in /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Exceptions/UrlGenerationException.php:17

Hi all,

i changed my single Routes to the CRUD Route Route::resource('news' , 'About\NewsController'); Now i when i push the action Button Edit I get the exception above. With my old Route, Route::get('news/edit', 'About\NewsController@update') ->name('news.update'); it worked, so i am confused now. Maybe you can help me.

Stacktrace

Stack trace:
#0 /var/www/html/heincloud/bootstrap/cache/compiled.php(9748): Illuminate\Routing\Exceptions\UrlGenerationException::forMissingParameters(Object(Illuminate\Routing\Route))
#1 /var/www/html/heincloud/bootstrap/cache/compiled.php(9738): Illuminate\Routing\UrlGenerator->toRoute(Object(Illuminate\Routing\Route), Array, true)
#2 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php(158): Illuminate\Routing\UrlGenerator->route('admin.news.edit', Array)
#3 /var/www/html/heincloud/app/Http/Controllers/Backend/About/NewsController.php(72): Illuminate\Routing\Redirector->route('admin.news.edit')
#4 [internal function]: App\Http\Controllers\Backend\About\NewsController->edit(Object(App\Aboutpages\News))
#5 /var/www/html/heincloud/bootstrap/cache/compiled.php(9584): call_user_func_array(Array, Array)
#6 /var/www/html/heincloud/bootstrap/cache/compiled.php(9611): Illuminate\Routing\Controller->callAction('edit', Array)
#7 /var/www/html/heincloud/bootstrap/cache/compiled.php(8665): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\Backend\About\NewsController), 'edit')
#8 /var/www/html/heincloud/bootstrap/cache/compiled.php(8646): Illuminate\Routing\Route->runController()
#9 /var/www/html/heincloud/bootstrap/cache/compiled.php(8355): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#10 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#11 /var/www/html/heincloud/app/Http/Middleware/SessionTimeout.php(59): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#12 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): App\Http\Middleware\SessionTimeout->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#14 /var/www/html/heincloud/app/Http/Middleware/RouteNeedsPermission.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#15 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): App\Http\Middleware\RouteNeedsPermission->handle(Object(Illuminate\Http\Request), Object(Closure), 'view-backend')
#16 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#17 /var/www/html/heincloud/app/Http/Middleware/LocaleMiddleware.php(57): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#18 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): App\Http\Middleware\LocaleMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#20 /var/www/html/heincloud/bootstrap/cache/compiled.php(10177): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#21 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#23 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#24 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#25 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#26 /var/www/html/heincloud/bootstrap/cache/compiled.php(3312): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#27 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#28 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#29 /var/www/html/heincloud/bootstrap/cache/compiled.php(13749): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#30 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#32 /var/www/html/heincloud/bootstrap/cache/compiled.php(12155): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#33 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#35 /var/www/html/heincloud/bootstrap/cache/compiled.php(13495): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#36 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#38 /var/www/html/heincloud/bootstrap/cache/compiled.php(13432): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#39 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#40 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#41 /var/www/html/heincloud/bootstrap/cache/compiled.php(10054): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#42 /var/www/html/heincloud/bootstrap/cache/compiled.php(8356): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#43 /var/www/html/heincloud/bootstrap/cache/compiled.php(8347): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#44 /var/www/html/heincloud/bootstrap/cache/compiled.php(8338): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#45 /var/www/html/heincloud/bootstrap/cache/compiled.php(2575): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#46 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}(Object(Illuminate\Http\Request))
#47 /var/www/html/heincloud/bootstrap/cache/compiled.php(3374): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#48 /var/www/html/heincloud/bootstrap/cache/compiled.php(10069): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#49 /var/www/html/heincloud/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#50 /var/www/html/heincloud/bootstrap/cache/compiled.php(10054): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#51 /var/www/html/heincloud/bootstrap/cache/compiled.php(2519): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#52 /var/www/html/heincloud/bootstrap/cache/compiled.php(2503): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#53 /var/www/html/heincloud/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#54 {main} 

Route

<?php

//
//All route names are prefixed with 'admin.about'.
Route::group([
    'prefix'    => 'about',
], function () {
    //start About Us
    /*
     * For DataTables
    */
    Route::get('about/get', 'About\AboutTableController') ->name('about.get'); 
    /*
     *Crud Routes
    */
    Route::resource('about', 'About\AboutController');
    Route::resource('tos'  , 'About\TosController');
    Route::resource('faq'  , 'About\FaqController');    
    Route::resource('news' , 'About\NewsController');
    Route::resource('dcma' , 'About\DcmaController');
});

NewsController

<?php

namespace App\Http\Controllers\Backend\About;

use App\Http\Controllers\Backend\About\NewsController;
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller;
use App\Aboutpages\News;

class NewsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('backend.about.news.index')
            ->withNews(News::all());
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('backend.about.news.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required',
            'content' => 'required',
        ]);

        News::create($request->all());
        return redirect()->route('admin.news.index')
                         ->with('success','News created successfully');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $news
     * @return \Illuminate\Http\Response
     */
    public function show($news)
    {
        $news = News::find($news);
        return view('backend.about.news.show',compact('news'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $news
     * @return \Illuminate\Http\Response
     */
    public function edit($news)
    {
        $news = News::find($news);
        return redirect()->route('admin.news.edit');
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $news
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $news)
    {
        $this->validate($request, [
            'title'   => 'required',
            'content' => 'required',
        ]);

        News::find($news)->update($request->all());

        return redirect()->route('admin.news.index')
                        ->with('success','News updated successfully');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $news
     * @return \Illuminate\Http\Response
     */
    public function destroy($news)
    {
        $news = News::where('id',$news)->first();

        if ($news != null) 
        {
            $news->delete();
            return redirect()->route('admin.news.index')->with(['message'=> 'Successfully deleted!!']);
        }
         return redirect()->route('admin.news.index')->with(['message'=> 'Wrong ID!!']);

    }
}

Index.blade

@extends ('backend.layouts.app')

@section ('title', trans('labels.pages.news.title'))

@section('after-styles')
    {{ Html::style("css/backend/plugin/datatables/dataTables.bootstrap.min.css") }}
@stop

@section('page-header')
  <h1>
    {{ trans('labels.pages.news.title') }}
      <small>{{ trans('labels.pages.table.index') }}</small>
  </h1>
@endsection

@section('content')
    @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
    @endif
  <div class="box box-success">
    <div class="box-header with-border">
      <h3 class="box-title">{{ trans('labels.pages.table.list') }}</h3>

        <div class="box-tools pull-right">
          @include('backend.about.includes.news-header-buttons')
        </div><!--box-tools pull-right-->
    </div><!-- /.box-header -->

    <div class="box-body">
      <div class="table-responsive">
        <table id="news-table" class="table table-condensed table-hover">
          <thead>
            <tr>
              <th>{{ trans('labels.pages.table.id') }}</th>
              <th>{{ trans('labels.pages.table.title') }}</th>
              <th>{{ trans('labels.pages.table.content') }}</th>
              <th>{{ trans('labels.pages.table.userid') }}</th>
              <th>{{ trans('labels.general.actions') }}</th>
            </tr>
          </thead>
            <tbody>
              @foreach ($news as $news)
                <tr>
                  <td>{{ $news->id }}</td>
                  <td>{{ $news->title }}</td>
                  <td>{{ $news->content }}</td>
                  <td>{{ $news->user_id }}</td>  
                  <td>
                      <a href="{{ route('admin.news.show',$news->id) }}"class="btn btn-xs btn-info"><i class="fa fa-search" data-toggle="tooltip" data-placement="top" 
                      title="show"{{ trans('buttons.general.crud.view') }}></i></a>
                      <a href="{{ route('admin.news.edit',$news->id) }}"class="btn btn-xs btn-primary"><i class="fa fa-pencil" data-toggle="tooltip" data-placement="top" 
                      title="edit"{{ trans('buttons.general.crud.edit') }}></i></a>
                  </td>              
                </tr>
              @endforeach
            </tbody>   
          </table>
        </div><!--table-responsive-->
    </div><!-- /.box-body -->
    <!--History-->
    <div class="box box-info">
      <div class="box-header with-border">
        <h3 class="box-title">{{ trans('history.backend.recent_history') }}</h3>
          <div class="box-tools pull-right">
            <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
          </div><!-- /.box tools -->
      </div><!-- /.box-header -->
      <div class="box-body">
        {!! history()->renderType('news') !!}
      </div><!-- /.box-body -->
    </div><!--box box-success-->
    <!--end History-->  
  </div><!--box-->
@stop

@section('after-scripts')
    {{ Html::script("js/backend/plugin/datatables/jquery.dataTables.min.js") }}
    {{ Html::script("js/backend/plugin/datatables/dataTables.bootstrap.min.js") }}

 <script>
    $(function() {
      $("#news-table").DataTable({
        order: [[0, "desc"]]
      });
    });
  </script>
@stop

edit.blade

@extends ('backend.layouts.app')

@section ('title', trans('labels.pages.news.title') . ' | ' . trans('labels.pages.news.edit'))

@section('page-header')
    <h1>
        {{ trans('labels.pages.news.title') }}
        <small>{{ trans('labels.pages.news.edit') }}</small>
    </h1>
@endsection


@section('content')
    @if (count($errors) > 0)
        <div class="alert alert-danger">
            <strong>Whoops!</strong> There were some problems with your input.<br><br>
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    {!! Form::model($news, ['method' => 'PATCH','route' => ['admin.news.update', $news->id]]) !!}

        <div class="box box-success">
            <div class="box-header with-border">
                <h3 class="box-title">{{ trans('labels.pages.table.input') }}</h3>

                <div class="box-tools pull-right">
                    @include('backend.about.includes.news-header-buttons')
                </div><!--box-tools pull-right-->
            </div><!-- /.box-header -->
            <!--Title-->
            <div class="box-body">
                <div class="form-group">
                    {{ Form::label('title', trans('labels.pages.table.title'), ['class' => 'col-lg-2 control-label']) }}

                    <div class="col-lg-10">
                        {{ Form::text('title', null, ['class' => 'form-control', 'placeholder' => trans('labels.pages.table.title')]) }}
                    </div><!--col-lg-10-->
                </div><!--form control-->

                <!--textarea-->
                <div class="form-group">
                    {{ Form::label('content', trans('validation.attributes.frontend.message'), ['class' => 'col-lg-2 control-label']) }}
                        <div class="col-lg-10">
                           {{ Form::textarea('content', null, ['class' => 'form-control', 'placeholder' => trans('validation.attributes.frontend.message')]) }}
                        </div><!--col-md-6 -->
                </div><!--form-group-->

            </div><!-- /.box-body -->
        </div><!--box-->

        <div class="box box-info">
            <div class="box-body">
                <div class="pull-left">
                    {{ link_to_route('backend.about.news.index', trans('buttons.general.cancel'), [], ['class' => 'btn btn-danger btn-xs']) }}
                </div><!--pull-left-->

                <div class="pull-right">
                    {{ Form::submit(trans('buttons.general.crud.create'), ['class' => 'btn btn-success btn-xs']) }}
                </div><!--pull-right-->

                <div class="clearfix"></div>
            </div><!-- /.box-body -->
        </div><!--box-->

    {{ Form::close() }}
  </script>
@stop
0 likes
4 replies
johny1983's avatar

Hi tomi,

but the index.blade, edit.blade and the NewsController have the ID $news -><a href="{{ route('admin.news.edit',$news->id) }}->

public function edit($news)
    {
        $news = News::find($news);
        return redirect()->route('admin.news.edit');
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $news
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $news)
    {
        $this->validate($request, [
            'title'   => 'required',
            'content' => 'required',
        ]);

        News::find($news)->update($request->all());

        return redirect()->route('admin.news.index')
                        ->with('success','News updated successfully');
    }

->{!! Form::model($news, ['method' => 'PATCH','route' => ['admin.news.update', $news->id]]) !!}

What made i wrong?

Greetz Marcus

Please or to participate in this conversation.