为Laravel表单字段定义默认值

时间:2013-07-07 08:13:49

标签: php laravel default-value

要预先填充表单字段,我们可以在create.blade.php中为表单字段添加“value”:

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

有没有办法在别处执行该任务(可能在模型或控制器中?)。我想在create& amp;中创建相同的表单字段代码。编辑视图。谢谢!

7 个答案:

答案 0 :(得分:15)

好的,我们在这里......我在示例中使用了Laravel的表单模型绑定。 (我使用User model / db table)。 如果您不清楚此主题,请查看此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());
    }

    ...

}

这里是控制器提供的视图文件。

// 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>

答案 1 :(得分:5)

是的,让我们考虑以下示例:

查看:

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

控制器:

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

如果Some default title不等于$article

,您将获得包含false或$ article标题的文字输入内容

答案 2 :(得分:3)

您需要做的就是在刀片模板中加入条件。

让我们假设您的数据库表有一个字段myfield,您希望默认为mydefault。

只需在创建和编辑视图调用的局部视图中包含以下内容:

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

你没有其他任何东西。

答案 3 :(得分:2)

如果你的意思是占位符,你可以这样做

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

答案 4 :(得分:1)

可能更容易(Laravel 5):

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

这是假设您使用该表单作为部分。如果表单的模型存在(您正在编辑或修补记录),它应该填充值,否则它应该显示您希望的默认值。

答案 5 :(得分:0)

使用“架构”构建器时(在迁移或其他位置):

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

答案 6 :(得分:0)

如果您希望有条件地执行此操作,则解决此问题的另一种方法可能是执行检查。如果此检查通过,则设置默认值(例如,下面以$nom为例)。否则,通过将其明确设置为null使其为空。

{{ Form::text('title', (isset($nom)) ? $nom : null) }}