3
votes

Fonction Laravel avec paramètre optionnel

Dans mon fichier Web, j'ai une route qui accepte un $ id comme valeur à transmettre à une fonction dans mon PagesController. Cependant, je veux que la fonction s'exécute toujours et affiche la forme voulue même si $ id n'est pas passé à la fonction.

fichier web.php

<input type="text" class="form-control" value="{{$target->inst_name}}" required disabled>  

PagesController. php

public function makeRequest($id)
{
   if(!empty($id)){
      $target = Partner::find($id);
   }
   return view('pages.makeRequest')->with('target', $target);
}

makeRequest.blade.php

Route::get('/request/{id}', 'PagesController@makeRequest');

Je veux que la page affiche les détails de la base de données avec le $ id lorsqu'il est fourni ou avoir des espaces vides lorsque $ id n'est pas fourni.


7 Réponses :


7
votes

Comme l'indique la documentation Laravel: utilisez les paramètres facultatifs comme ceci :

public function makeRequest($id = null)
    {
        if(!empty($id)){
            $target = User::find($id);
            return view('pages.makeRequest')->with('target', $target); 
        } else {
            return view('pageslist'); ///set default list..
        }        
    }

Contrôleur

Route::get('/request/{id?}', 'PagesController@makeRequest'); //Optional parameter


3 commentaires

Merci pour votre réponse. Je viens de l'essayer et j'ai eu une erreur. `` `` Trop peu d'arguments pour fonctionner App \ Http \ Controllers \ PagesController :: makeRequest (), 0 passé et exactement 1 attendu `` ``


avez-vous passé l'identifiant dans votre URL?


Je veux que cela fonctionne à la fois pour les instances, c'est à dire. variable passée ou non.



0
votes

Pour les paramètres optionnels pass id avec? dans route et donnez $ id = null dans le paramètre de votre fonction comme ceci:

Route::get('/request/{id?}', 'PagesController@makeRequest'); //Optional parameter

makeRequest($id = null) {

// Code here...
...

}



0 commentaires

0
votes

dans votre fichier de routes (web.php, comme mentionné dans votre question)

public function makeRequest($id = null)
{

}

et dans votre contrôleur PagesController.php

Route::get('/request/{id?}', 'PagesController@makeRequest');

Pour en savoir plus à ce sujet, il suffit de lire https://laravel.com/docs /5.7/routing#parameters-optional-parameters


0 commentaires

0
votes

Vous pouvez utiliser le paramètre facultatif :

<?php 

public function makeRequest($id = null)
{
   if($id){

        $target = Partner::findOrFail($id);

        return view('pages.makeRequest')->with(compact('target'));
   }

   // Return different view when id is not present
   // Maybe all targets if you want

   $targets = Partner::select('column1', 'column2')->get();

   return view('pages.all')->with('targets');

}


0 commentaires

2
votes

Toutes vos solutions ont été utiles. L'essentiel était que lorsque j'appelais uniquement la vue sans passer $ target à la vue, la page affichait une erreur. Voici donc ce que j'ai fait.

<input type="text" class="form-control" value="" required readonly> 

Ensuite, dans le contrôleur,

public function makeRequest(Request $request, $id=null)
    {
        if ($id != null) {
            $target = Partner::find($id);
            return view('pages.makeRequest')->with('target', $target);
        }
        return view('pages.makeNullRequest');
    }

Si vous ne comprenez pas ce qui s'est passé, j'ai créé un nouvelle vue qui avait ceci au lieu de ce que j'avais publié dans la question.

Route::get('/request/{id?}', 'PagesController@makeRequest');

Désolé, je ne vous ai pas mis à jour à temps. Je pense que Jignesh Joisar a été le plus proche de m'aider à résoudre ce problème. vous appréciez vraiment tous les gars. Vous êtes tout simplement génial


0 commentaires

0
votes

Voici comment je l'ai fait:

localhost/api/index?id=7

// contrôleur

 public function index(Request $request )
    {
        $id= $request->query('id');
    }

La façon dont vous l'appelez:

  Route::get('index', 'SeasonController@index');


0 commentaires

0
votes

Pour moi, la réponse était dans l'ordre dans lequel j'ai répertorié les routes dans le fichier routes.

Le fichier routes appellera le premier qui correspond au modèle.

Route::get('/ohmy/all', 'OhMyController@all'); 
Route::get('/ohmy/{id?}', 'OhMyController@show');

Au lieu de cela, mettez des paramètres facultatifs à la fin de la liste:

Route::get('/ohmy/{id?}', 'OhMyController@show');
Route::get('/ohmy/all', 'OhMyController@all');   //never gets called


0 commentaires