php - example - Laravel: poblar formas al tiempo que permite Form:: old()
laravel textarea (4)
Debe pasar la entrada anterior del controlador ( $entry
debe contener su entrada en la base de datos):
return View::make(''sampleform'')->with(''entry'', $entry)->with_input();
Y luego, en la vista, use una instrucción if en línea para cargar la entrada si está presente, o bien cargue desde la base de datos:
Form::text(''entry'', Input::old(''entry'') ? Input::old(''entry'') : $entry, array(''class'' => ''form-select'');
¿Cuál es la mejor manera de rellenar formularios con datos de bases de datos elaborados utilizando la clase Form en Laravel y dando paso a Input::old()
si hay algún error? Parece que no puedo hacerlo bien.
Mi configuración actual se ve algo como esto
public function getSampleform() {
// Load database data here
return View::make(''sampleform'');
}
public function postSampleform() {
// Save to database again then redirect to success page
return Redirect::to(''success'');
}
Suelo repetir mis campos en la vista de esta manera:
<?php echo Form::text(''entry'', Input::old(''entry''), array(''class'' => ''form-select''); ?>
¿Qué estoy haciendo mal?
El helper old()
en Laravel (al menos en 5.0) permite un valor predeterminado, de modo que si se define un valor predeterminado $entry
, entonces, si hace esto:
<?php
echo Form::text(''entry'', Input::old(''entry'', $entry), array(''class'' => ''form-select'');
?>
El ayudante primero intentará buscar el valor antiguo de la forma y si falla utilizará el valor $entry
. Esto también evita tener que usar un operador ternario en su código.
Sin embargo, al hacer la redirección y hay un error, debe volver a enlazar los datos de entrada anteriores para que su método postSampleform()
se vea así:
public function postSampleform() {
// Save to database again then redirect to success page
if ($success)
{
return Redirect::to(''success'');
}
else
{
return Redirect::to(''sampleform'')->withInput(Request::all());
}
}
Normalmente lo hago de esta manera:
// Check first if there is data from database else blank
$entry = (isset($data->entry)) ? $data->entry : '''';
<?php echo Form::text(''entry'', isset(Input::old(''entry'')) ? Input::old(''entry'') : $entry, array(''class''=>''form-select'')); ?>
Luego, en su controlador, puede hacer esto:
public function getSampleform() {
// Load database data
$data = "Database data here";
return View::make(''sampleform'', compact(''data''));
}
public function postSampleform() {
// validate
// if validation fails
// redirect back and pass old inputs
return Redirect::to(''getSampleform'')->withInput();
}
Tenga en cuenta que esto es para Laravel 4 .. Espero que esto funcione para usted .. Saludos ...
La mejor forma de hacerlo es usar Enlace de modelo de formulario ( http://four.laravel.com/docs/html#form-model-binding ):
Use un modelo existente o cree una clase de modelo ''vacía'':
class NoTable extends Eloquent {
protected $guarded = array();
}
Encuentra tu modelo o ejemplifica tu clase vacía y llénala con datos:
public function getSampleform() {
// Load database data here
$model = new NoTable;
$model->fill([''name'' => ''antonio'', ''amount'' => 10]);
return View::make(''sampleform'')->with(compact(''model''));
}
Si usa su formulario con una tabla que ya tiene datos, así es como lo usa:
public function getSampleform() {
// Locate the model and store it in a variable:
$model = User::find(1);
// Then you just pass it to your view:
return View::make(''sampleform'')->with(compact(''model''));
}
Para rellenar su formulario, use Enlace de modelo de formulario, este es un ejemplo en Blade:
{{ Form::model($model, array(''route'' => array(''sample.form'')) ) }}
{{ Form::text(''name'') }}
{{ Form::text(''amount'') }}
{{ Form::close() }}
Ni siquiera tiene que pasar sus datos de entrada, porque Laravel completará sus entradas usando lo que viene primero:
1 - Session Flash Data (Old Input)
2 - Explicitly Passed Value (wich may be null or not)
3 - Model Attribute Data
Y Laravel también se encargará del token csrf, usando Form :: open () o Form :: model ().