##Controller(コントローラー)
ユーザーがアクセスしたアドレスをルーティングが割り振り、実際に実行すべき処理を実行します。その実行すべき処理をコントローラーに記載します。
ルーティングについて不明な方はこちら
###Controllerの作成
Controllerの作成は手動でも行えますが、コマンドで実行したほうが間違いがなく確実です。
php artisan make:controller モデル名Controller
コマンドを実行するとapp>Http>Controllers
にファイルが生成されます。
単純な全件取得や削除処理など、モデルに処理を依頼するまでもない場合Controllerから直接データベースにアクセスすることが可能です。
その場合、以下のように実装が可能です
<?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
の内容を以下に書き換える
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+/)
//protected $namespace = 'App\\Http\\Controllers';
この一文がないとControllerが正しく動作しないため、エラーになるようです。
名前空間の指定がされていないとか、、、、