Salut,

Je me suis mis à Laravel depuis quelques jours et voilà mon problème
Je suis en train de créer un site avec comme première page, un formulaire de saisie d'email, rien d'autre (c'est de l'intranet, donc peu importe)
Lors de la saisie de l'email, celui-ci est stocké dans un cookie, pour que l'utilisateur n'ait pas à le saisir à chaque fois.
Une fois qu'on a saisie cet email, on arrive sur une nouvelle page avec un formulaire plus complet.

Home, contient le formulaire avec le champ email
Akioform est ce sur quoi on arrive une fois qu'on a saisie l'email

Controller Home

public function index()
{
    $email = Cookie::get('email');
    return View::make('home.index')->withCookie($email);
}

Vue Home

<form action="{{ URL::to('akioform') }}" method="POST">
    <label for="email">Adresse e-mail :</label>
    <input type="text" placeholder="Saisissez votre adresse e-mail" value="{{ $email }}" name="email"/>
    <input class="button prefix" type="submit" value="Valider"/>
</form>

Controller Akioform

public function index()
{
    $valid_email = false;
    // D'abord on récupère l'email passé en POST
    if(Input::get('email'))
    {
        // On vérifie son format
        $validator = Validator::make(array('email' => Input::get('email')), array('email' => 'required|email'));
        if(!$validator->fails())
        {
            // Créer un cookie pour toujours
            $email = Cookie::forever('email', Input::get('email'));
            $valid_email = true;
        }
    }
    // Le cookie email est présent ou alors l'email est valide ? On peut afficher la vue
    if(Cookie::get('email') || $valid_email)
    {
        return View::make('akioform.index')->withCookie($email);
    }
    else
    {
        // Si le validator ne passe pas, on récupère la première erreur
        $erreur = 'Veuillez saisir une adresse email';
        if (isset($validator) && $validator->fails())
        {
            $erreur = $validator->messages()->first('email');
        }
        $view = Redirect::to('/')->with('erreur', $erreur);
        return Response::make($view)->withCookie($email);
    }
}

Mes routes

Route::get('/', 'HomeController@index');
Route::any('akioform', 'AkioformController@index');

Mon problème est que le Cookie n'est, soit jamais créé, soit inaccessible.
Je ne comprends pas comment simplement set un cookie, et l'utiliser par la suite.

Merci de votre aide ;)

Bisous

2 réponses


Chokkan Web
Auteur
Réponse acceptée

Ok, j'ai réussi, en séparant en deux méthodes distinctes l'action POST de l'email et la page GET akioform.
En gros côté POST j'init le Cookie, ensuite je redirige si c'est ok vers la page en GET, sinon vers la page Home.

Je te conseil plutot de le faire par Session, Session::put('email', 'mon@mail.fr'); et tu y accède via Session::get('email');