LoginSignup
0
0

More than 1 year has passed since last update.

Controllerの作成(Laravelでウェブアプリを作ろう⑤)

Last updated at Posted at 2021-05-01

Controller(コントローラー)

ユーザーがアクセスしたアドレスをルーティングが割り振り、実際に実行すべき処理を実行します。その実行すべき処理をコントローラーに記載します。
ルーティングについて不明な方はこちら

Controllerの作成

Controllerの作成は手動でも行えますが、コマンドで実行したほうが間違いがなく確実です。

Controllerの作成
php artisan make:controller モデル名Controller

コマンドを実行するとapp>Http>Controllersにファイルが生成されます。
単純な全件取得や削除処理など、モデルに処理を依頼するまでもない場合Controllerから直接データベースにアクセスすることが可能です。
その場合、以下のように実装が可能です

UserController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use \App\Models\User;

class UserController extends Controller
{   

    //全件取得します
    public function getAll(){
        return User::all();
    }

    //1件取得します
    public function getOne($userId){
        return User::find($userId);
    }

    //新規に作成します。
    public function create(Request $request){
        $newUser = new User;
        $form = $request->all();
        $newUser -> fill($form) -> save();
        //登録したidを返却します
        return $newUser->id;
    }

    //名前を変更します。処理一緒?
    public function changeName($userId){
        $newUser = new User;
        $form = $request->all();
        $newUser -> fill($form) -> save();
        //登録したidを返却します
        return $newUser->id;
    }

    //削除します。
    public function delete($userId){
        User::delete($userId);
    }   
}

Routesの作成

routesというのはURIとコントローラー内のメソッドの紐付けのことで、これを行うことにより様々な処理ができるようになります。
上記で作成したように手動でコントローラーの中身を作成することもできれば、下記のように記述し、簡単に実装することもできます。

あまり使わない方がいいかも?
Route::resouce

ただし、この方法で実装した場合には必要のないURIを作成してしまったり、逆に必要なURIが足りない場合に追加したりすると、何があるのか分かりにくくなることがあります。(「更新処理と全件取得は実装しない」「名前の更新とパスワードの更新の処理を分けたい」など)
そのため、少し作業は多くなりますが最初から自動実装の機能を使わずに実装した方が結果的に見やすくなることが多いです。
routes>api.phpの内容を以下に書き換える

api.php
Route::group(['middleware' => ['api']], function(){
    //users
    //全件取得します
    Route::get('users', 'UserController@getAll');

    //1件取得
    Route::get('users/{userId}', 'UserController@getOne');

    //新規作成
    Route::post('users/', 'UserController@create');

    //名前の更新
    Route::put('users/{userId}', 'UserController@changeName');

    //削除
    Route::delete('users/{userId}', 'UserController@delete');
});

エラーが出る場合

ただし、このまま実装するとエラーになります。(Laravelのバージョンによってはエラーにならないかも)
以下の操作を追加してください
app/Providers/RouteServiceProvider.phpを開き、下記の一文のコメントを解除してください。(command+/)

RouteServiceProvider.php
//protected $namespace = 'App\\Http\\Controllers';

この一文がないとControllerが正しく動作しないため、エラーになるようです。
名前空間の指定がされていないとか、、、、

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0