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

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

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

PostingController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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