laravel 4 Input::vieux() est vide

Je suis en utilisant Laravel 4 pour un projet, mais a eu un problème. Je ne suis pas sûr, ce que je fais mal.

Détails:

  • Formulaire est affiché sur le contrôleur de la fonction de sauvegarde.
  • Lors de la validation échoue, je suis rediriger vers la fonction create
  • Après redirection (à l'aide de Redirect::to(somewhere)->withErrors($validator)->withInput()):
    • Erreurs de Validation sont affichés correctement (le cas échéant)
    • D'entrée::vieux() est vide (il doit contenir des données précédemment présentées)

Créer de la fonction de contrôleur

public function create()
{
    $this->scripts[] = 'various js path here';

    return View::make('admin.modules.events.create', array(
        //Loading various scripts specified in this function
        'scripts' => $this->scripts,
    ));
}

Dans la vue:

...
{{ Form::bsInput('event_name', 'Event title', 'event title goes here', $error = (($errors->has('event_name')) ? $errors->get('event_name') : false), $type = 'text', Input::old('event_name')) }}
...

Note: bsInput est un wrapper autour de la Forme::Input() pour créer bootstrap contrôle avec étiquettes

Contrôleur:

public function save()
{
if (Input::has('submitEventSave'))
{
$event = Mihirevent::find(Input::get(event_id));
$event_add = false;
}
else
{
$event = new Mihirevent();
$event_add = true;
}
if ($event === false)
{
//doing something else
}
else
{
$event->event_name              = Input::get('event_name');
$event->event_slug              = Input::get('event_slug');
$event->event_description       = Input::get('event_description');
$event->event_location_text     = Input::get('event_location_text');
$event->event_location_data     = Input::get('event_location_data');
$event->event_status            = Input::get('event_status');
$event->featured_image          = Input::get('featured_image');
$event->event_date_from         = Input::get('event_date_from');
$event->event_date_until        = Input::get('event_date_until');
$validation_rules = $event_add === true?$event->rules:$event->update_rules;
$inputs = array(
'event_name'            => $event->event_name,
'event_slug'            => $event->event_slug,
'event_location_text'   => $event->event_location_text,
);
$validator = Validator::make($inputs, $validation_rules);
if ($validator->fails())
{
Input::flash();
if ($event_add === true)
{
return Redirect::to('admin/event/create')
->withErrors($validator)->withInput();
}
else
{
return Redirect::to('admin/event/edit/'.$event->event_id)
->withErrors($validator)->withInput();
}
}
//save
MihirEvent::save();
//redirect to list 
return Redirect::route('adminEvent');
}
}

Mise à jour:

bsInput macro:

Form::macro('bsInput', function($name, $text, $placeholder = null, $error = false, $type = 'text', $default = null, $class=null)
{
$label = Form::label($name, $text, array('class' => 'control-label'));
$input = Form::input($type, $name, $default, array('placeholder' => $placeholder, 'class' => 'form-control'.($class?' '.$class:'')));
$error_messages = false;
if($error)
{
$error_messages = '<ol>';
foreach ($error as $value) {
$error_messages .= '<li>'.$value.'</li>';
}
$error_messages .= '</ol>';
}
$html  = '<div class="form-group'.(($error) ? ' has-error' : '').'">';
$html .= $label;
$html .= $input;
$html .= (($error_messages) ? '<div class="alert alert-danger">'.$error_messages.'</div>' : '');
$html .= '</div>';
return $html;
});
Êtes-vous sûr d'Entrée::vieux() est vide ou n'est-il pas visible dans le formulaire de saisie où vous le souhaitez?
il a vérifié avec var_dump/dd, il est vide
il est ok avant la redirection, mais vide après la redirection
c'est étrange, parce que le withError() fonctionne correctement
j'ai aussi essayé avec d'Entrée::flash(), même résultat

OriginalL'auteur beerwin | 2014-04-14