Laravel France

Comment utiliser les variables d'une fonction dans une autre fonction du même contrôleur

Avatar de Haras
Haras

Bonjour, Je voudrais récupérer des données à partir de mon formulaire et les utilisées pour des appels API.

Formulaire (product.blade.php)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1>Ajouter produit</h1>
    <form action="data" method="POST">
        @csrf
        <p>Nom : <input type="text" name="name"/></p>
        <p>ID: <input type="text" name="code"/></p>
        <p><input type="submit" value="submit" name="submit"></p>
    </form>
</body>
</html>

Fonction pour la récupération des données (dans le contrôleur product.php)

public function getData(Request $request){
    $name = $request->input('name');
    $id = $request->input('code');

    return redirect(route('addProduct')) ;
  }

Routes

Route::get('/addProduct', [product::class, 'addProduct'])->name('addProduct');
Route::post('/data', [product::class, 'getData'])->name('data');
Route::view('/addingProduct', 'product');

A la fin de la récupération je redirige vers 'addProduct' qui est le nom de la route de la deuxième fonction qui se trouve dans le même contrôleur et dont le rôle est de se connecter à une API et faire un POST

Le problème est que je n'arrive pas à transmettre les données de la première fonction vers la deuxième. Je ne peux pas non plus récupérer directement les données dans la deuxième fonction car il faut que la route soit définie en get pour les appels API.

J'ai également tenté les sessions mais apparemment les données récupérées ne peuvent être utilisées que dans des vues. Y'aurait-il une manière de passer les variables d'une fonction à une autre? Dans le cas contraire comment puis-je procéder pour résoudre mon problème?

Merci pour votre aide!

Posté il y a 3 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Je ne vois pas pourquoi tu dis que la route doit être définie en GET pour les appeils API... Un appel api sur une route en POST est faisable sans aucun problème.

Deuxièmement, les sessions peuvent être utilisées dans les vues comme dans les controllers sans soucis également.

Si vraiment tu veux une troisème option, tu peux faire un truc comme ça:

public function getData(Request $request){
    $name = $request->input('name');
    $id = $request->input('code');

    // appel direct de la fonction au sein du même controller
    $this->addProduct($name, $id) ;
  }

Et dans ta fonction addProduct(), tu peux permettre que les parametres soient nulls en faisant

public function addProduct($name = null, $id = null){
    [...]
  }

Mais en terme de bonne pratique, une fonction juste pour recuperer deux parametres c'est pas génial je trouve... Moi j'aurai passé directement la route addProduct (en POST, bien sûr) à ton form

Posté il y a 3 mois
Avatar de Haras
Haras

Salut et merci pour la réponse. J'ai essayé la 3ème méthode mais je tombe sur cette erreur:

****Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException ****The GET method is not supported for this route. Supported methods: POST.

J'obtiens également la même erreur lorsque j'essaie de faire l'appel API sur la route POST.

En ce qui concerne les sessions, j'ai réessayer de cette manière et tout marche corectement, j'avais sûrement omis un détail.

Première fonction

public function getData(Request $request){

    $product = $request->input();
    $request->session()->put('name', $product['name']);
    $request->session()->put('code', $product['code']);

    return redirect(route('addProduct')) ;
  }

Deuxième fonction

public function addProduct(Request $request)
    {
      $name = session('name');
      $id = session('code');
      
      ..........
     }

Merci pour les conseils!

Posté il y a 3 mois

Vous ne pouvez pas répondre à ce sujet.