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
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
Vous devez vous connecter pour publier un commentaire.
À la recherche à la Laravel 4 source:
C'est comme si vous ne passez pas d'un tableau d'Entrée avec ->withInput il essaie de le retirer de la demande d'origine. Essayez de modifier la ligne comme ceci:
Ce devrait, espérons-le forcer à passer le tableau de valeurs d'entrée, au lieu de compter sur la
encore existants dans la session.
Très étrange. Avez-vous été en mesure de vérifier que l'Entrée:tous les() ou w/e, vous avez passé par les valeurs que vous vouliez?
Aussi, avez-vous essayé seulement de stocker les données dans une session manuellement, et de le récupérer à partir de la session à partir de la vue?
L'Entrée::all() contient des données avant la redirection, qu'un flash de perte de données (toutes les données en flash, pas juste à l'entrée). Aussi essayé de stocker des données dans la session, mais qui fonctionne normalement.
Ce beau travail. 🙂
OriginalL'auteur Dustin Parham
Vous faites
Input::flash()
et puiswithInput()
, qui effectivement neInput::flash()
deux fois, probablement le fait d'invalider le flashé entrée. Essayez de le faire seulement l'un des deux.Aussi,
MihirEvent::save();
est faux, vous voulez faire$event->save();
.Alors je vous suggère d'essayer de recréer la question dans un vide nouveau projet en utilisant le moins de code possible.
Je vais essayer plus tard.
il fonctionne avec un nouveau laravel l'installation, mais je ne peux toujours pas comprendre pourquoi cela ne fonctionne pas avec ce contrôleur (le reste de l'contrôleurs fonctionnent bien)
OriginalL'auteur Andreas
J'ai enfin trouvé la question: Il y a un espace dans le routes.php fichier, avant la
<?php
balise d'ouverture. (c'était le travail en équipe et quelqu'un d'autre a ajouté que l'espace).ancienne entrée utilise session pour le stockage, et qu'à la tête de l'espace (avant la balise php) était de sortie interférant avec la session (en-têtes déjà envoyé par erreur)
OriginalL'auteur beerwin