Model
データベースのカラムの値に対応するテキストを取得するメソッドの定義
/*
* Users テーブルのカラム user_security_level の値に対応するテキストを返すメソッド
*/
public function getUserSecurityLevelText()
{
switch ($this->user_security_level){
case 0:
return "開発権限";
break;
case 100:
return "管理者権限";
break;
case 1000:
return "一般権限";
break;
case 10000:
return "外部権限";
break;
default:
return "???(" . $this->user_security_level . ")";
}
}
Controller
create(登録)
・create メソッドで、view を返す場合には、空の Model を渡してください。
/*
* ユーザー 登録
*/
public function create()
{
$user = new User();
return view('users_create', ['user'=>$user]);
}
store(登録 – 保存)
・データを編集 → 上書き保存する場合には、update() メソッドを定義せず、store() メソッドを編集にも対応できるよう書き換えてください。
/*
* ユーザー 登録 - 保存
*/
public function store(Request $request)
{
//バリデーション
$validator = Validator::make($request->all(), [
'user_code'=>'required|numeric|max:4',
'user_name'=>'required|max:64'
]);
//バリデーション:エラー
if ($validator->fails()) {
return redirect('/')
->withInput()
->withErrors($validator);
}
//登録処理
$users = new User();
$users->user_code = $request->user_code;
$users->user_name = $request->user_name;
$users->save();
return redirect('/');
}
21行目を以下の通り書き換えます。
if (isset($request->id)){//編集
$users = User::find($request->id);
} else {//登録
$users = new User();
}
※編集の場合には、Request $request に $request->id が定義されているので、該当レコードを読み込んで上書きします。
削除機能に対応するため、7行目から if ($request->user_is_delete == “1”){ 等を追記して、以下の通り完成させます。
/*
* ユーザー 登録 - 保存
*/
public function store(Request $request)
{
if ($request->user_is_delete == "1"){//削除
$user = User::find($request->id);
$user->delete();//論理削除
} else {//登録・編集
//バリデーション
$validator = Validator::make($request->all(), [
'user_code'=>'required|numeric|max:4',
'user_name'=>'required|max:64'
]);
//バリデーション:エラー
if ($validator->fails()) {
return redirect('/')
->withInput()
->withErrors($validator);
}
//登録処理
if (isset($request->id)){//編集
$users = User::find($request->id);
} else {//登録
$users = new User();
}
$users->user_code = $request->user_code;
$users->user_name = $request->user_name;
$users->save();
}
return redirect('/');
}
バリデーション
バリデーションは、バックエンド側はセキュリティ対策(SQL インジェクション等)のために設定しておきますが、UI としてのバリデーションはフロントエンドで行いますので、バックエンド側のバリデーションメッセージの日本語化は不要です。
※不正なデータの書き込みを防ぐ目的でのバリデーションであって、仮になんらかの不正データが送信されたとしても そのエラーメッセージを閲覧する可能性があるのは 不正データを送信したユーザーのみであって、一般ユーザーが閲覧する可能性はないと考えられるためです。
【補足】Laravel 新規プロジェクトの作成方法
- プロジェクトのフォルダーを作成し、docker-compose.yml および docker フォルダーをコピーして保存します。
- docker-compose.yml ファイルを開き “MYSQL_DATABASE” のデータベース名を変更しておきます。
- ターミナルから “docker-compose up -d” を実行して、docker を起動します。
- “docker-compose exec php bash” を実行して PHP コンテナに入ります。
- ルートディレクトリから(フォルダ移動等せず)”composer create-project laravel/laravel=6.* laravel –prefer-dist” を実行します(プロジェクト名に “laravel” を指定することで、laravel フォルダーに作成されます)。Laravel10をインストールする場合には “composer create-project laravel/laravel=10.* laravel –prefer-dist” を実行します(”dev-master” を付けると、リリース前の最新版(Laravel11等)がインストールされる可能性があるので気を付けること)。
- “Application key set successfully.” が表示されたら完了ですので、”http://localhost:8080/” を開きます。
- “Permission denied” エラーが表示されたら、laravel/storage フォルダの権限を変更するため “chmod -R 777 laravel/storage” を実行します。
- “Database name seems incorrect” エラーが発生したら、.env ファイルを開いて “DB_DATABASE” と “DB_PASSWORD” を変更します。
- 以上で Laravel ロゴが表示されます。
【補足】ログイン機能の実装方法
1) プロジェクトルートから laravel フォルダに移動し、laravel/ui パッケージをインストールします(Laravel6 以降はこの作業は不要)。
$ composer require laravel/ui:^1.0 --dev
※プロジェクトルートディレクトリの composer.json の中に下記の記述があればインストール完了。
"require-dev": {
"facade/ignition": "^1.16.15",
"fakerphp/faker": "^1.9.1",
"laravel/ui": "^1.0",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"phpunit/phpunit": "^8.5.8|^9.3.3"
},
2) laravel/ui に vue を導入するために、次の artisan コマンドを実行します(”–auth” を付けることで認証機能も併せて導入されます)。
$ php artisan ui vue --auth
3) 以下のコマンドを実行して npm パッケージをインストールします。
$ npm install
※”bash: npm: command not found” エラーが発生する場合には、以下を実行してから再実行してみる。
# パッケージ一覧を更新
apt update
apt install nodejs npm
4) npm パッケージをビルドします。
$ npm run dev
【補足】ログイン機能の日本語化
ログイン機能を日本語化するには こちら のドキュメントに従って日本語化してください。
【補足】メール送信機能について
メール送信については こちら を参考に設定してください。
users テーブルにカラムを追加するには?
1) 以下を実行して、カラム追加用マイグレーションファイルを作成します。
> php artisan make:migration add_column_to_users_table
2) 作成されたマイグレーションファイルにカラムを追加するため以下のように行を挿入します。
class AddColumnToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
//
$table->smallInteger('user_security_level')->default(10000);
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
//
});
}
}
3) 以下を実行してカラムを追加します。
> php artisan migrate
ログイン認証 home の左側にメニューバーを追加する
- こちらの記事を参考に、menu.blade.php を追加し、メニューバー : コンテンツの幅の比率を 2:10 に上書きします。
- public/css フォルダーに style.css を作成し、メニューバーをデザインします。
【補足】Laravel10 に Breeze をインストールするには?
“docker-compose exec php bash” を実行して PHP コンテナを起動し、laravel フォルダーに移動してから “composer require laravel/breeze –dev” を実行し、続けて “php artisan breeze:install” を実行してインストールします。
(※選択肢はデフォルトの “Blade with Alpine” “No” “PHPUnit” を選択します)
※「Vite manifest not found at: /var/www/html/laravel/public/build/manifest.json」エラーが出た場合…
- (いらない可能性がある→)Ubuntu の「プロジェクトルートから」”$ sudo apt install npm” コマンドで npm をインストールします。
- “npm init” を実行して package.json ファイルを作成します(不明な項目は [Enter] で進みます)。
- “$ npm install” を実行して Laravel Vite をインストールします。
- “laravel” ディレクトリに移動して? “npm run dev” を実行します。→ ERR
(3)以降、以下の手順
“docker-compose exec php bash” を実行して PHP コンテナを起動し、laravel フォルダーに移動してから “composer require innocenzi/laravel-vite” を実行し、一旦 bash を exit したあと “$ npm install vite laravel-vite -D” を実行する。
補足 node.js / npm バージョン確認
node.js のバージョン確認は、Ubuntu から “node -v”、npm のバージョン確認も、Ubuntu から “npm -v”
Laravel Vite のインストール確認
“vite.config.js” ファイルが存在すれば、Laravel Vite はインストールされている…と考えて良いのではないだろうか!?
SNS開発18年で2つのSNSを開発・運用中の当社が、あなたのアイデアを形にするお手伝いをします。