web-dev-qa-db-fra.com

Définir les valeurs par défaut pour Laravel champs de formulaire

Pour pré-renseigner un champ de formulaire, nous pouvons ajouter une «valeur» à celui-ci dans create.blade.php:

{{ Form::text('title', 'Some default title') }}

Y at-il un moyen de faire cette tâche ailleurs (peut-être dans le modèle ou le contrôleur?). J'aimerais que le code des champs de formulaire soit identique dans la vue Créer et modifier. Merci!

8
my2c

Ok, alors nous y sommes ... J'ai utilisé la liaison de modèle de formulaire de Laravel dans l'exemple. (Je travaille avec le modèle utilisateur/la table des bases de données.) Si ce sujet n’est pas clair pour vous, jetez un coup d’œil à ceci http://laravel.com/docs/html#form-model-binding

// Controller

class UsersController extends BaseController
{

    ...

    // Method to show 'create' form & initialize 'blank' user's object
    public function create()
    {
        $user = new User;
        return View::make('users.form', compact('user'));
    }

    // This method should store data sent form form (for new user)
    public function store()
    {
        print_r(Input::all());
    }

    // Retrieve user's data from DB by given ID & show 'edit' form   
    public function edit($id)
    {
        $user = User::find($id);
        return View::make('users.form', compact('user'));
    }

    // Here you should process form data for user that exists already.
    // Modify/convert some input data maybe, save it then...
    public function update($id)
    {
        $user = User::find($id);
        print_r($user->toArray());
    }

    ...

}

Et voici le fichier de vue servi par le contrôleur.

// The view file - self describing I think
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    @if(!$user->id)
    {{ Form::model($user, ['route' => 'admin.users.store']) }}
    @else
    {{ Form::model($user, ['route' => ['admin.users.update', $user->id], 'method' => 'put']) }}
    @endif
        {{ Form::text('firstName') }}

        {{ Form::text('lastName') }}

        {{ Form::submit() }}
    {{ Form::close() }}
</body>
</html>
15
Andreyco

Oui, considérons l'exemple suivant:

Vue:

{{ Form::text('title', $title) }}

Manette:

$title = 'Some default title';
if($article) {
    $title = $article->title;
}
return View::make('user.login')->with('title', $title)

Ensuite, vous aurez une entrée de texte avec Some default title ou le titre de $ article, si $article n'est pas égal à false

5
Victor Bjelkholm

Tout ce que vous avez à faire est d'inclure une condition dans votre modèle de lame.

Supposons que votre table de base de données possède un champ myfield, que vous souhaitez définir par défaut sur mydefault.

Incluez simplement les éléments suivants dans une vue partielle appelée par les vues créer et modifier:

@if(isset($myfield))
{{ Form::input('text','myfield') }}
@else
{{ Form::input('text','myfield','mydefault') }}
@endif

Vous n'avez rien d'autre à faire.

2
Relaxing In Cyprus

si vous voulez dire un espace réservé, vous pouvez le faire

{{ Form::password('password', array('placeholder' => 'password'))}}
2
mahami

Probablement plus facile (Laravel 5):

{{ Form::text('title', isset($yourModel) ? null : 'Some default title') }}

Cela suppose que vous utilisez le formulaire en tant que partiel. Si le modèle du formulaire existe (vous modifiez ou modifiez un enregistrement), il doit renseigner la valeur. Sinon, il devrait vous indiquer la valeur par défaut que vous souhaitez.

1
Jafo

Lorsque vous utilisez le générateur de schéma (dans Migrations ou ailleurs):

Schema::create( 
      'posts', function($table) {
          $table->string('title', 30)->default('New post'); 
      }
);
0
Ivan Castellanos