もうはっきり言っておきます。
自分はLaravelではシステム開発したくないw
cakePHPに比べたらめちゃくちゃ分かりづらいし作業が面倒。使いやすいとかいう言葉聞きますが個人的には全く思わない。
cakePHPは命名規則がある以外はむしろこっちのほうが使いやすく感じる。
今回は一件のデータをDBに登録するまでのメモを残します。
なぜかというと、プログラム上級者や配信者からすればこんな簡単なことはネットに乗せるほどでもないだろうという内容なんでしょうが、自分がこの一件のデータをDBに登録するだけの情報を探しても色々な方法が出てきて、しかもあまり的に当てはまらないものばかり(ほとんどが中上級者向けに近い)。
インストール時にすでに出来上がっているUserController.phpを利用してメモを残します。
まずはUserController.phpにあるメソッドに登録するためのプログラムを追記。
コントローラーはapp>Http>Controllersフォルダ内にあります。
// UserController.php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
*** 他関数省略 ***
public function create()
{
// resources/viewsフォルダ内にuserフォルダを作成し、中にcreate.blade.phpファイルを作成
return view("users.create");
}
public function store(Request $request)
{
// formからpost送信されたら$requestに情報が入る
if(!empty($request)) {
$user = new User();
$user->name = $request->name; // inputのnameがname
$user->email = $request->email; // inputのnameがemail
$user->password = $request->password; // inputのnameがpassword
$user->save();
}
// 登録完了後にcreate画面に戻る
return view("users.create");
}
*** 他関数省略 ***
}
このsave関数でデータを登録するソースがなかなか検索で出てこないw
簡単なソースなだけに公開するまでもないのかなー・・・
Userはname、email、passwordがDBではNullがいいえになってるようなので、このinput情報は必須だそう。
だけど、一件分だけ登録できる動作を確認したいため、emailとpasswordを毎回入力するのは面倒。名前だけでいいかなと。
ということでフォーム部分はemailとpasswordは適当でいいかと思い、hiddenで準備しておく。
create.blade.phpはresources>viewsフォルダ内にusersフォルダを作成し、その中に新規でファイルを作りました。
// create.blade.php
<form action="{{ route('users.create') }}" method="POST">
@csrf
<input type="text" name="name">
<input type="hidden" name="email" value="non-email@test.com">
<input type="hidden" name="password" value="1234567890">
<input type="submit" value="登録">
</form>
これにより、nameはテキストフィールドは手入力したデータ、emailとpasswordはあらかじめ用意したデータを飛ばすことになります。
そして、飛ばす先は//ドメイン/users/createにポスト送信することになります。
ただ、DBに登録する処理はUserController.phpのstore関数で行うことになっているので、ポストする情報はstore関数で受け取らなければなりません。
これをroute設定をする必要があります。そのファイルはweb.phpになります。
web.phpはroutesフォルダ内にあります。
// web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
// 元からあったもの
Route::get('/', function () {
return view('welcome');
});
// ドメイン/usersとつくURLで処理するための設定
Route::get('/users/', [UserController::class, 'index'])->name('users.index');
// ドメイン/users/createと入力した場合
Route::get('/users/create', [UserController::class, 'create'])->name('users.create');
// ドメイン/users/create先にpost送信した場合、store関数を実行する
Route::post('/users/create', [UserController::class, 'store'])->name('users.store');
念のため、ビューやキャッシュのクリアをコマンドで行ったあと、ブラウザにドメイン/users/createと入力してフォーム画面が表示すればあとは動作確認です。
これでもいろいろとエラーが出る場合があるんですよねー。でも、ひとまずエラーが出なかったときのソースをメモ残し。
参考になれば幸いです。