フォームから値を受けっとってDBの保存、表示までの簡単なサンプル。
Laravelでデータを扱う方法はQueryBuilder(DB::*)を使う方法と、Eloquent ORMを使う方法があるが、とりあえず、QueryBuilderを使う。QueryBuilderはモデルの定義無く使えるので便利である。
なお、ここでは、すでにmembersテーブルが存在することを前提に進める。
いちおうマスターレイアウト。
####Formの用意
<!doctype>
<html>
<head>
<meta charset="utf-8">
<title>
@yield('title')
</title>
</head>
<body>
@yield('body')
</body>
</html>
ポイントは、普通のフォームでもname='_token'でcsrf_token()を送るところ。
@extends('master')
@section('title')
input
@stop
@section('body')
<form action="res" method="post">
<input type="input" name="name">
<input type="input" name="email">
<input type="submit" value="SEND">
<input type="hidden" name="_token" value="{{csrf_token()}}">
</form>
@stop
####受取と保存
受取については、Laravel5からはFormRequestを使うのが良いのだろうけど、とりあえずInputで受け取る。Inputを利用するには、use Input;とする必要がある。
ここでは、/inputでFormを表示、/resで値を受け取ってDBに保存する。
DBを使うためには、use DB;とする。
<?php namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Input;
use DB;
class HogeController extends Controller{
//form表示
public function input(){
return view('input');
}
//受取と保存
public function res(){
$name = Input::get('name');
$email = Input::get('email');
DB::table('members')->insert([
'name'=>$name,
'email'=>$email
]);
return "Saved";
}
//一覧表示
public function select(){
$members = DB::table('members')->get();
return view('select')->with('members',$members);
}
}
####表示
@extends('master')
@section('title')
select
@stop
@section('body')
<h3>list</h3>
@foreach($members as $member)
{{$member->name." ".$member->email}}<br>
@endforeach
@stop
ここでは、Controllerのselect()で一覧を取得しているが、
$members = DB::select(DB::raw('select * from members'));
などとして、DB::raw()により生クエリを実行することもできる(rawを利用しない書き方もある)。
####Route
一応Routeも。
Route::get('input','HogeController@input');
Route::post('res','HogeController@res');
Route::get('select','HogeController@select');