open old form example collective php laravel laravel-4

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 ().