LaravelでBBSのコントローラを作る Part2

安藤(プログラマー)
演劇もやっていまする。

前回の続きですが、今回は投稿処理側のコントローラを作成します。
作成の手順は同じく。内容はこんな感じになりますねー。

PostingController

namespace App\Http\Controllers;
use App\Posting;
use App\UploadFile;
use App\Http\Controllers\Controller;
use App\Http\Requests\PostingRequest;
use App\Http\Requests\AuthenticationRequest;
class PostingController extends Controller
{
// 新規投稿
public function postCreate(PostingRequest $request)
{
Posting::addPost($request->all(),0);
return redirect()->back();
}
// 更新処理
public function postUpdate(AuthenticationRequest $request)
{
Posting::editPost($request->input('id'),$request->all());
return redirect()->action('BbsController@resultPage');
}
// 削除処理
public function postDelete(AuthenticationRequest $request)
{
Posting::deletePost($request->input('id'),$request->all());
return redirect()->action('BbsController@resultPage');
}
// 返信投稿
public function postReply(PostingRequest $request)
{
Posting::addPost($request->all(),$request->input('id'));
return redirect()->action('BbsController@resultPage');
}
}

処理の内容自体は単純かと思いますので説明は割愛します。
各処理内でPostingのメソッドを呼び出していますが、モデル側はどんな中身かと言いますと・・。

Posting.php

namespace App;
use Illuminate\Database\Eloquent\Model;
class Posting extends Model
{
/**
* モデルと関連しているテーブルの指定
*
* @var string
*/
protected $table = 'posting';
/**
* createメソッド実行時に、入力を禁止するカラムの指定
*
* @var array
*/
protected $guarded = array('id');
// 投稿処理
static function addPost($request,$target_id = 0)
{
$post = Posting::create([
'target_id' => $target_id,
'name' => $request['name'],
'comment' => $request['comment'],
'mail_address' => $request['mail_address'],
'password' => $request['password'],
]);
if(isset($request['files']))
{
foreach($request['files'] as $value)
{
$file = file_get_contents($value);
$mime = $value->getMimeType();
UploadFile::create([
'target_id' => $post->id,
'file' => $file,
'mime' => $mime,
]);
}
}
}
// 編集処理
static function editPost($id,$request)
{
Posting::query()->where('id',$id)->update([
'name' => $request['name'],
'comment' => $request['comment'],
'mail_address' => $request['mail_address'],
]);
if(isset($request['files']))
{
UploadFile::query()->where('target_id',$id)->delete();
foreach($request['files'] as $value)
{
$file = file_get_contents($value);
$mime = $value->getMimeType();
UploadFile::create([
'target_id' => $id,
'file' => $file,
'mime' => $mime,
]);
}
}
}
// 削除処理
static function deletePost($id,$request)
{
Posting::query()->where('id',$id)->delete();
UploadFile::query()->where('target_id',$id)->delete();
}
}

UploadFile.php

namespace App;
use Illuminate\Database\Eloquent\Model;
class UploadFile extends Model
{
/**
* モデルと関連しているテーブルの指定
*
* @var string
*/
protected $table = 'upload_file';
/**
* createメソッド実行時に、入力を禁止するカラムの指定
*
* @var array
*/
protected $guarded = array('id');
}

と、こんな具合の中身ですね。

DBを操作する処理はすべてモデルにやらせています。
モデルがDBとのデータのやりとりを担当し、取得したデータをコントローラが扱う、という関係ですかね。

これで前回のBbsControllerと組み合わせて、表示と処理の機能が正常に動くようになりました。
MVCの関係を、少しづつ少しづつ、理解できるようになってきました・・。

まだ先は長そうですが、頑張りますm(_ _)m