ブレードテンプレートの送信フォームには、次の日付フォームがあり、Y-m-d
のようなデフォルトの日付で正常に機能します。
しかし、私はd-M-Y
のような日付を表示したいので、運がなくても使用可能な解決策を見つけようとしました
デフォルトの日付で機能するコードは次のとおりです。
これがモデルです
public static $rules = [
'birthday' => 'date'
];
protected $fillable = ['birthday'];
これがControllerメソッドです
public function update($id)
{
$kid = Kid::findOrFail($id);
$validator = Validator::make($data = Input::all(), Kid::$rules);
if ($validator->fails())
{
return Redirect::back()->withErrors($validator)->withInput();
}
$kid->update($data);
return Redirect::to('kids/list');
}
これがBladeテンプレートです
{{ Form::model($kid, ['method' => 'PATCH', 'route' => ['kids.update', $kid->id], 'files' => true], ['class' => 'form-horizontal']) }}
{{ Form::text('birthday', null, ['class' => 'form-control']) }}
{{ Form::submit('Confirm update', ['class' => 'btn btn-primary']) }}
{{ Form::close() }}
[〜#〜]更新[〜#〜]
これは、4.2以降のすべてのLaravelバージョンで機能します。
Laravel 5.1以降の場合、Laravel 5の一部ではなくなったため、 個別のパッケージ としてインストールする必要があります芯。
Html/form Builderはフレームワークのコア要件ではないと判断されたため、コアから削除されました。私がリンクしたパッケージは、L4コアに含まれていて、L5の互換性と使用法のために別個のパッケージとして維持されているパッケージなので、必要に応じて安全に使用できます。
このアップデートをしてくれた@Bogdanに感謝します。
データベースストレージ用とユーザーインタラクション用に1つの日付形式が必要な場合は、表示する前とデータベースに保存する前に処理する必要があります。したがって、次のようなことを行う必要があります。
1。フォーム入力の日付値を変換します:
{{ Form::text('birthday', date('d-M-Y', strtotime($kid->birthday)), ['class' => 'form-control']) }}
2。保存する前に、データベースに必要な形式に変換してください:
public function update($id)
{
$kid = Kid::findOrFail($id);
// Convert birthday format to be compatible with database ISO 8601 format
$data = Input::all();
$data['birthday'] = date('Y-m-d', strtotime($data['birthday']));
$validator = Validator::make($data, Kid::$rules);
if ($validator->fails())
{
return Redirect::back()->withErrors($validator)->withInput();
}
$kid->update($data);
return Redirect::to('kids/list');
}
よりオブジェクト指向の日付処理方法が必要な場合は、Laravelにすでに含まれている Carbon
を使用できます。