mnm.mtl
mnm.mtl

Reputation: 51

Missing required parameters for a route in laravel

i am trying to pass 2 parameters in my URL and i tried it before and it worked perfectly, but now is giving me this error : " Missing required parameter for [Route: details] [URI: {RS}/{id}] [Missing parameter: RS]. "

this is the route in my web.php :

Route::get('/{RS}/{id}', 'App\Http\Controllers\SiteController@getDetails')->name('details');

this is the view :

<div class="card-body text-dark">
                    <div style="width:120px " class="ml-1 mt-1 vender-img">

                    <a  href="{{route('details',['id'=> $Resultas->ID , 'RS'=> $Resultas->RS] )}}">
                    @if( $Resultas->Logo != "" )
                        <img style="height:110px" src="{{URL::asset('assets/images/logos/'.$Resultas->ID . '/'.$Resultas->Logo)}}" alt="image">
                        @else
                        <img style="height:110px" src="{{URL::asset('assets/images/idea.png')}}" alt="image">
                    @endif
                    </a> 

                    </div>

                    <h6 class="card-title"><a href="{{route('details',['id'=> $Resultas->ID , 'RS'=> $Resultas->RS] )}}">{{$Resultas->RS}}</a></h6>
                    <p class="card-text">{{ Str::limit($Resultas->Descp , 150) }}</p>

                </div>

as you can see i am trying to pass the id and RS in that URL .

this is the function from the controller :

public function getDetails($id , $RS)
{
    $detailsPage = entreprise::find($id);
    $detailsPage->increment('views');
    //dd($detailsPage->title);

    $review = avis::where('id_e', $id)->where('active',1)->count();

    $avg = avis::where('id_e', $id)->where('active',1)->avg('rating');

    $avgStar = avis::where('id_e', $id)->where('active',1)->avg('rating');

    if ($avgStar > 0 && $avgStar <= 0.5) {
        $avgStar = 0;
    } elseif ($avgStar > 0.5 && $avgStar <= 1) {
        $avgStar = 1;
    } elseif ($avgStar > 1 && $avgStar <= 1.5) {
        $avgStar = 1;
    } elseif ($avgStar > 1.5 && $avgStar <= 2) {
        $avgStar = 2;
    } elseif ($avgStar > 2 && $avgStar <= 2.5) {
        $avgStar = 2;
    } elseif ($avgStar > 2.5 && $avgStar <= 3) {
        $avgStar = 3;
    } elseif ($avgStar > 3 && $avgStar <= 3.5) {
        $avgStar = 3;
    } elseif ($avgStar > 3.5 && $avgStar <= 4) {
        $avgStar = 4;
    } elseif ($avgStar > 4 && $avgStar <= 4.5) {
        $avgStar = 4;
    } elseif ($avgStar > 4.5) {
        $avgStar = 5;
    }

    $data = ['LoggedUserInfo' => User::where('id', '=', session('LoggedUser'))->first()];

    $gallery = galerie::where('identre', '=', $id)
                      ->select('galeries.Img as img', 'galeries.alt as alt')
                      ->get();

    $banner = galerie::where('identre', $id)
                      ->where('banner', 1)
                      ->first();

    $service = services::where('id_ent', '=', $id)
                       ->select('service')->get();


    $relate = entreprise::where('idact', '=', $detailsPage->idact)
                        ->where('id', '!=', $id)
                        ->where('entreprises.active', '=', 1)
                        ->select('id','RS','Logo')
                        ->get();

    $comments = avis::join('users','users.id','=','avis.id_user')
                    ->where('avis.id_e',$id)
                    ->where('active','=', 1)
                    ->select('avis.comment as comment' , 'avis.rating as rating' , 'users.name as name' , 'users.last_name as last_name' , 'avis.created_at as created_at')
                    ->paginate(10);

    return view('entreprise_details', $data, ['details' => $detailsPage, 'galerie' => $gallery, 'serv' => $service, 'relate' => $relate, 'stars' => $avgStar, 'AVG' => $avg, 'rev' => $review , 'comment' => $comments ,'banners' => $banner]);
}

it must be a stupid error that i can't find maybe some additional eyes can help me !

Upvotes: 0

Views: 977

Answers (1)

AliHpanahi
AliHpanahi

Reputation: 139

it is possible that one of the values you are passing to route can be null, so just use ? after them to ignore the error and check them in controller if their value is null or not

Route::get('/{id?}/{RS?}', 'App\Http\Controllers\SiteController@getDetails')->name('details');

Upvotes: 2

Related Questions