- 投稿日:2020-02-25T23:43:34+09:00
Laravelでデータを取得した時の返り値にはCollectionとModelの二種類ある
laravelでデータを取得するときに使うメソッド
個人的によく使うメソッドにgetとfirstがある。
データ取得した後にnullかどうかの判定をするのことがあるが、返り値の違いで書き方が変わるのでまとめておく。get
getメソッドは、PHPのstdClassオブジェクトのインスタンスを結果として含む、Illuminate\Support\Collectionを返します。
(公式ドキュメントより引用)first
データベーステーブルから1レコードのみ取得する必要がある場合は、firstメソッドを使います。このメソッドはstdClassオブジェクトを返します。
(公式ドキュメントより引用)違い
getはCollection、firstはModelのオブジェクトで返ってくる。
nullの判定
CollectionだとisEmptyメソッドが使えるので便利。
collect([])->isEmpty(); // truefirstの場合、NULLで返ってくるのでis_nullを使う。
- 投稿日:2020-02-25T22:53:49+09:00
Laravelのフォーム、バリデーション・入力値の保持(Blade書き方メモ)
Laravelのフォームについての個人的なメモです。
Bootstrapのフォーム
・まとめたい要素form-control(label、option、selectなど)は
form-gruop
にまとめる。バリデーション
・
@error
ディレクティブを使う。引数にはチェックする項目を。
・フォームタグ内にrequired
属性を追加することで、ブラウザによるバリデーションを行う。入力値の保持
・
old()
と三項演算子でテーブルに登録されている値を入れる。
・autocomplete
には自動入力する値を設定。input
<div class="form-gruop"> <label for="title">Title</label> <input id="title" class="form-control @error('title') is-invalid @enderror" name="title" required autocomplete="title" value="{{ old('title') ? : $articles->title }}"> @error('title') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div>textarea
<div class="form-gruop"> <label for="Text">Text</label> <textarea class="form-control @error('text') is-invalid @enderror" name="text" required autocomplete="text" rows="4">{{ old('text') ? : $articles->text }}</textarea> @error('text') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div>select
<div class="form-gruop"> <label for="num">Number</label> <select name="num" id="genre" class="form-control @error('num') is-invalid @enderror" required> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> @error('num') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div>
- 投稿日:2020-02-25T20:33:57+09:00
ユーザーアカウント登録内容の変更の手順
はじめに
laravelでAuthを実装すると簡単にユーザー登録が可能になりますが、登録内容の変更は別途実装する必要があります。
本投稿では名前、メールアドレスを変更する手順について記載します。
パスワードの変更手順については本投稿では触れませんが、下記サイトがかなり参考になります。
[Laravel 5.7]パスワード変更フォームの作り方
- バージョン php: 7.2 laravel: 5.8
- Authは実装済みであること
Controllerの編集
UserControllerの作成
$ php artisan make:controller Admin/UserControllerUserControllerの編集
User.Controller.php<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; //追加 class UserController extends Controller { //下記を追加 //userデータの取得 public function index() { return view('user.index', ['user' => Auth::user() ]); } //userデータの編集 public function edit() { return view('user.edit', ['user' => Auth::user() ]); } //userデータの保存 public function update(Request $request) { $user_form = $request->all(); $user = Auth::user(); //不要な「_token」の削除 unset($user_form['_token']); //保存 $user->fill($user_form)->save(); //リダイレクト return redirect('user/index'); } }Viewの作成と編集
ユーザー登録内容の表示
user/index.blade.php<div class="container m-5"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">ユーザー登録内容</div> <div class="card-body"> <div class="form-group"> <label for="name"> 名前 </label> <div> <input class="form-control" value="{{ $user->name }}"> </div> </div> <div class="form-group"> <label for="email"> email </label> <div> <input class="form-control" value="{{ $user->email }}"> </div> </div> <a href="{{ action('Admin\UserController@edit') }}"><button class="user-btn">ユーザー登録内容の編集</button></a> </div> </div> </div> </div> </div>ユーザー情報の変更
user/edit.blade.php<div class="container m-5"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">ユーザー登録内容の変更</div> <div class="card-body"> <form method="POST" action="{{ action('Admin\UserController@update') }}"> <div class="form-group"> <label for="name"> 名前 </label> <div> <input type="text" name="name" class="form-control" value="{{ $user->name }}"> </div> </div> <div class="form-group"> <label for="email"> email </label> <div> <input type="text" name="email" class="form-control" value="{{ $user->email }}"> </div> <button type="submit" class="user-btn">変更</button> {{ csrf_field() }} </form> </div> </div> </div> </div> </div>先ほどのユーザー登録内容の表示画面で「ユーザー登録内容の編集」ボタンをクリックすると下記画面に移る
Routingの設定
user/index.blade.phpRoute::group(['middleware' => 'auth:user'], function() { Route::get('user/index', 'Admin\UserController@index'); Route::get('user/edit', 'Admin\UserController@edit'); Route::post('user/edit', 'Admin\UserController@update'); });
- 投稿日:2020-02-25T20:33:57+09:00
ユーザーアカウント登録内容の変更の手順(パスワードは除く)
はじめに
laravelでAuthを実装すると簡単にユーザー登録が可能になりますが、登録内容の変更は別途実装する必要があります。
本投稿では名前とメールアドレスを変更する手順について記載します。パスワードは少し難しくなるので別途投稿する予定です。
- バージョン php: 7.2 laravel: 5.8
- Authは実装済みであること
Controllerの編集
UserControllerの作成
$ php artisan make:controller Admin/UserControllerUserControllerの編集
User.Controller.php<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; //追加 class UserController extends Controller { //下記を追加 //userデータの取得 public function index() { return view('user.index', ['user' => Auth::user() ]); } //userデータの編集 public function edit() { return view('user.edit', ['user' => Auth::user() ]); } //userデータの保存 public function update(Request $request) { $user_form = $request->all(); $user = Auth::user(); //不要な「_token」の削除 unset($user_form['_token']); //保存 $user->fill($user_form)->save(); //リダイレクト return redirect('user/index'); } }Viewの作成と編集
ユーザー登録内容の表示
user/index.blade.php<div class="container m-5"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">ユーザー登録内容</div> <div class="card-body"> <div class="form-group"> <label for="name"> 名前 </label> <div> <input class="form-control" value="{{ $user->name }}"> </div> </div> <div class="form-group"> <label for="email"> email </label> <div> <input class="form-control" value="{{ $user->email }}"> </div> </div> <a href="{{ action('Admin\UserController@edit') }}"><button class="user-btn">ユーザー登録内容の編集</button></a> </div> </div> </div> </div> </div>ユーザー情報の変更
user/edit.blade.php<div class="container m-5"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">ユーザー登録内容の変更</div> <div class="card-body"> <form method="POST" action="{{ action('Admin\UserController@update') }}"> <div class="form-group"> <label for="name"> 名前 </label> <div> <input type="text" name="name" class="form-control" value="{{ $user->name }}"> </div> </div> <div class="form-group"> <label for="email"> email </label> <div> <input type="text" name="email" class="form-control" value="{{ $user->email }}"> </div> <button type="submit" class="user-btn">変更</button> {{ csrf_field() }} </form> </div> </div> </div> </div> </div>先ほどのユーザー登録内容の表示画面で「ユーザー登録内容の編集」ボタンをクリックすると下記画面に移る
Routingの設定
user/index.blade.phpRoute::group(['middleware' => 'auth:user'], function() { Route::get('user/index', 'Admin\UserController@index'); Route::get('user/edit', 'Admin\UserController@edit'); Route::post('user/edit', 'Admin\UserController@update'); });
- 投稿日:2020-02-25T20:16:01+09:00
【Laravel】アクセサ、ミューテタの基本のキ
はじめに
今回はアクセサとミューテタの基本について解説します。
そもそもミューテタとは?
そもそもミューテタってなんなんでしょうか?
簡単にいうとデータをデータベースに保存する時に走る一定の処理のことです。そもそもアクセサとは?
そもそもアクセサとはなんでしょうか?
簡単にいうとデータをデータベースから取得する時に走る一定の処理のことです。使用例
例えば、都道府県をデータベースに保存する時を考えます。
そのまま文字データとして都道府県を保存することもありますが、多くの場合は整数に置き換えて保存します。(1が北海道、2が青森など都道府県それぞれに対応させた整数を設定する。こうする理由は文字データより圧倒的に整数の方がデータ容量が少ないからデータベースを圧迫しないからです。)
しかし、データベースにデータを保存する時に変換して、取得した時も変換してと毎回処理を書くのはめんどくさい。。。無駄なコードが増えるから邪魔!!!
できれば、アプリケーションで自動に処理してほしいですね。
そこで、活躍するのがアクセサとミューテタです!!
今回は基本のキということで簡単な例を扱っていきます。
最低限必要なエッセンスだけ説明します。
では、スターーーーート!!アクセサとミューテタでなにができるの?
Laravelを使ったことがある人であれば、実はミューテタとアクセサはもう使っているんです!!
Laravelではcreated_at、updated_atは自動的にCarbonインスタンスに変換されて使うようになっています。
だから、日付に関しては簡単に実装することができます。(日付については最後に記載しています)
しかし、今回は自分で独自にミューテタ、アクセサの実装する方法について説明します。アクセサの実装方法
アクセサはモデル内に定義します。
アクセサの命名規則はgetFooAttribute
アクセサを設定したいカラム名が「キャメルケース」でHogeの場合、カラムがあるモデルクラスにgetHogeAttributeメソッドを作成します。
アクセサ定義例:first_nameカラムにアクセサ定義
Userモデルクラスに下記を追加
下記のコードでfirst_nameカラムを取得する時にgetHogeAttribute
(頭文字を大文字に変える)が実行されます。app/User.php<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { public function getFirstNameAttribute($value) { return ucfirst($value); } }
getFirstNameAttribute
の引数$value
がデータベースから取得したカラムの中身になります。
ちなみにucfirst($value)
が頭文字を大文字にするメソッドですアクセサを実行する
上記のコードが正しく動いていれば、下記のように単純に
first_name
カラムを引っ張ってくるだけで自動でgetFirstNameAttribute
が実行されます。$user = App\User::find(1); $firstName = $user->first_name;以上がアクセサの使い方です。
ミューテタの実装方法
ミューテタもアクセサと同様にモデル内に定義します。
ミューテタの命名規則
これもアクセサと同様に、アクセスしたいカラム名が「キャメルケース」でFooの場合、カラムがあるモデルクラス内にsetFooAttributeメソッドを作成します。
ミューテタ定義例:first_nameカラムにミューテタ定義
下記のコードで
first_name
カラムの保存時に自動でsetFirstNameAttribute
が実行されます。app/User.php<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value); } }
value
が設定しようとしている中身になります。
strtolower
が全て小文字に変えるメソッドです。
setFirstNameAttribute
の引数$value
が設定しようとしている値です。上記のメソッドはUserインスタンスのattributes
プロパティのfirst_name
に小文字にした$value
が代入されるようになっています。ミューテタを実行してみる
下記の場合2行目の
first_name
カラムにSallay
を設定しようとした時に、setFirstNameAttribute
メソッドが呼び出され、Sallay
の値が渡され、ミューテタが実行されます。
実は保存時にミューテタが実行されるわけではなく、インスタンスに値を設定する時にミューテタは実行されることに注意です$user = App\User::find(1); $user->first_name = 'Sally';おまけ:日付ミューテタ
おまけに日付ミューテタについて記述します。
自分で作成した日付のカラムをCarbonインスタンスで扱い時、設定は簡単です。
定義する場所はミューテタと同じモデルの中に定義します。
その中にデフォルトである$dates
をオーバーライドしますapp/User.php<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $dates = [ 'created_at', 'updated_at', 'deleted_at' ]; }これにより、データベースから
delete_at
を取得すると自動でCarbonインスタンスに変換されているため、
自由にCarbonにあるメソッドを使うことができます。
Carbonについてはこちらでざっとまとめているので、是非!!以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!
- 投稿日:2020-02-25T18:59:25+09:00
Laravel on Dockerでのブロードキャスト
TL;DL
Docker環境のLaravelでのブロードキャストを実装しました
Dockerを使ったLaravel環境構築
インストールするのはLaravel 6.xです。
$ mkdir broadcast $ cd broadcast $ composer create-project --prefer-dist laravel/laravel src├── docker-compose.yml ├── docker │ ├── echoserver │ │ └── Dockerfile │ ├── nginx │ │ └── default.conf │ ├── php │ │ ├── Dockerfile │ │ ├── cmd.sh │ │ └── php.ini │ └── redis │ └── data ├── logs └── src # Laravelの置き場所docker-compose.ymlversion: '3' services: web: image: nginx:1.17.8-alpine ports: - 80 volumes: - ./src:/var/www:cached - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf - ./logs/nginx:/var/log/nginx:cached depends_on: - php environment: VIRTUAL_HOST: localhost php: image: broadcast-php build: ./docker/php volumes: - ./src:/var/www:cached - ./logs/php:/var/log/php - ./docker/php/cmd.sh:/usr/local/bin/cmd.sh nodejs: image: node:13.8-alpine volumes: - ./src:/work:cached working_dir: /work echo-server: image: broadcast-echo-server build: ./docker/echoserver ports: - "6001:6001" command: laravel-echo-server start volumes: - ./src:/work:cached working_dir: /work redis: image: redis:latest ports: - "6379:6379" volumes: - "./docker/redis/data:/data"docker/echoserver/DockerfileFROM node:13.8-alpine # timezone RUN apk add --update --no-cache --virtual build-dependencies tzdata && \ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \ echo "Asia/Tokyo" > /etc/timezone && \ apk del build-dependencies RUN npm install -g laravel-echo-server WORKDIR /work CMD ["laravel-echo-server", "start"]docker/php/DockerfileFROM php:7.3-fpm-alpine COPY php.ini /usr/local/etc/php/ # lib RUN apk add --no-cache --virtual build-dependencies gcc make autoconf libc-dev libtool \ && apk add --no-cache --virtual zlib1g-dev libxml2-dev # composer COPY --from=composer /usr/bin/composer /usr/bin/composer # php extension RUN docker-php-ext-install xml pdo_mysql # timezone RUN apk add --update --no-cache --virtual build-dependencies tzdata && \ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \ echo "Asia/Tokyo" > /etc/timezone && \ apk del build-dependencies WORKDIR /var/wwwdocker/php/cmd.sh#!/bin/sh php-fpm
docker/nginx/default.confserver { listen 80; index index.php index.html; root /var/www/public; charset utf-8; location / { root /var/www/public; try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HOGE $realip_remote_port; } }ビルドして、最初の
docker-compose up -d
ではLaravel Echo Serverは起動しません。$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES nginx:1.17.8-alpine "nginx -g 'daemon of…" 14 seconds ago Up 12 seconds 0.0.0.0:32774->80/tcp broadcast_web_1 broadcast-php "docker-php-entrypoi…" 16 seconds ago Up 13 seconds 9000/tcp broadcast_php_1 node:13.8-alpine "docker-entrypoint.s…" 16 seconds ago Exited (0) 13 seconds ago broadcast_nodejs_1 broadcast-echo-server "docker-entrypoint.s…" 16 seconds ago Exited (0) 12 seconds ago broadcast_echo-server_1 redis:latest "docker-entrypoint.s…" 16 seconds ago Up 13 seconds 0.0.0.0:6379->6379/tcp broadcast_redis_1そこで初期化コマンドを実行する必要があります。
$ docker-compose run --rm echo-server laravel-echo-server init ? Do you want to run this server in development mode? Yes ? Which port would you like to serve from? 6001 ? Which database would you like to use to store presence channel members? redis ? Enter the host of your Laravel authentication server. http://localhost ? Will you be serving on http or https? http ? Do you want to generate a client ID/Key for HTTP API? No ? Do you want to setup cross domain access to the API? No ? What do you want this config to be saved as? laravel-echo-server.json Configuration file saved. Run laravel-echo-server start to run server.これで
src/laravel-echo-server.json
という設定ファイルが作られます。
この中のRedisの接続情報でRedisコンテナを指定します。src/laravel-echo-server.json{ ... "databaseConfig": { "redis": { "host": "redis", "port": 6379 }, "sqlite": { "databasePath": "/database/laravel-echo-server.sqlite" } }, ... }落として、再度立ち上げます。
$ docker-compose down $ docker-compose up -d $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES nginx:1.17.8-alpine "nginx -g 'daemon of…" 10 seconds ago Up 7 seconds 0.0.0.0:32775->80/tcp broadcast_web_1 node:13.8-alpine "docker-entrypoint.s…" 11 seconds ago Exited (0) 9 seconds ago broadcast_nodejs_1 broadcast-php "docker-php-entrypoi…" 11 seconds ago Up 9 seconds 9000/tcp broadcast_php_1 broadcast-echo-server "docker-entrypoint.s…" 11 seconds ago Up 9 seconds 0.0.0.0:6001->6001/tcp broadcast_echo-server_1 redis:latest "docker-entrypoint.s…" 11 seconds ago Up 9 seconds 0.0.0.0:6379->6379/tcp broadcast_redis_1これでLaravel Echo Serverも起動しました。
にアクセスするとLaravelインストール直後の画面が表示されます。
ブロードキャスト
ここからが本題のブロードキャストです。
以下が公式のドキュメント。https://laravel.com/docs/6.x/broadcasting
https://readouble.com/laravel/6.x/ja/broadcasting.html今回はRedisを使います。
ほぼほぼ公式の手順でうまくいきます(そして公式ドキュメントに載っていない設定で躓く。。)
App\Providers\BroadcastServiceProvider
の登録コメントを外します。
$ diff src/config/app.php.orig src/config/app.php 174c174 < // App\Providers\BroadcastServiceProvider::class, --- > App\Providers\BroadcastServiceProvider::class,HTMLへのCSRFトークンの追加とJSの読み込み
$ diff src/resources/views/welcome.blade.php.orig src/resources/views/welcome.blade.php 8a9,10 > <meta name="csrf-token" content="{{ csrf_token() }}"> > 98a101,102 > > <script src="{{ mix('js/app.js') }}"></script>Redisのクライアントライブラリのインストール
$ cd src $ composer require predis/predisイベントの作成
$ docker-compose exec php php artisan make:event HelloWorldEvent Event created successfully.イベントの
broadcastOn()
でチャンネルを返すのですが、今回作るのは認証が必要ないチャンネルとします。src/app/Events/HelloWorldEvent.php<?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class HelloWorldEvent implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $message = 'Hello World!!'; /** * Create a new event instance. * * @return void */ public function __construct() { // } /** * Get the channels the event should broadcast on. * * @return \Illuminate\Broadcasting\Channel|array */ public function broadcastOn() { return new Channel('hello-world-channel'); } }イベント発行のコマンドの作成
$ docker-compose exec php php artisan make:command BroadcastHelloWorld Console command created successfully.src/app/Console/Commands/BroadcastHelloWorld.php<?php namespace App\Console\Commands; use Illuminate\Console\Command; use App\Events\HelloWorldEvent; class BroadcastHelloWorld extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'command:broadcast-hello-world'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { event(new HelloWorldEvent()); } }フロントエンド
laravel-echo
とsocket.io-client
が必要です。$ docker-compose run --rm nodejs npm install $ docker-compose run --rm nodejs npm install --save laravel-echo socket.io-clientなんか
npm install
で警告いっぱい出た。。。
チャンネルとイベントを指定してリッスンします。$ diff src/resources/js/app.js.orig src/resources/js/app.js 1a2,14 > > import Echo from 'laravel-echo'; > > window.io = require('socket.io-client'); > > window.Echo = new Echo({ > broadcaster: 'socket.io', > host: window.location.hostname + ':6001' > }); > > window.Echo.channel('hello-world-channel').listen('HelloWorldEvent', e => { > console.log(e.message); > });.envの変更
$ diff src/.env.orig src/.env 16c16 < BROADCAST_DRIVER=log --- > BROADCAST_DRIVER=redis 18c18 < QUEUE_CONNECTION=sync --- > QUEUE_CONNECTION=redis 22c22,24 < REDIS_HOST=127.0.0.1 --- > REDIS_HOST=redis > REDIS_CLIENT=predis > REDIS_PREFIX=""!!重要!!
ここでRedisのprefix
を空文字にすることが重要です。
これが公式ドキュメントに書かれていなくて、調べてやっと見つけました。ブロードキャストできるか確認
$ docker-compose run --rm nodejs npm run dev$ docker-compose exec php php artisan command:broadcast-hello-world $ docker-compose exec php php artisan queue:work --stop-when-empty Processing: App\Events\HelloWorldEvent Processed: App\Events\HelloWorldEvent成功しました!!
laravel-echo-server.json
のRedisコンテナ指定の修正や、Redisのprefix
の変更など、Redis周りで難しかったですが、なんとかDocker環境でブロードキャストできました参考URL
この記事がなかったら自分は諦めてました。感謝
- 投稿日:2020-02-25T18:06:56+09:00
Laravel artisanコマンドのエラー Could not open input file: artisan
前回の記事の続きのような形で、MAMP環境でのlaravelの環境構築の記事でも書こうかと思っていたのですが、すでに良記事がゴロゴロ転がっているので必要ないかなと思ってるのですが、どうでしょう?
(訳 : 需要がありそうならMAMPのインストール、Laravelのプロジェクト作成、データベース周りの設定もやろうかと思います)さて今日から
今日から記事の量産体制に入ろうかと思います。
Laravelを中心に小さいエラーの対処法から、覚えておくと便利なコードの書き方までガンガン書き記していきます。
読み物としては物足りないかもしれませんが、人は思わぬところで躓くものなので……。
これからの私の記事はそういった人達の一助になればと考えています。今回の題
今回の題材は、タイトルの通りです
Could not open input file: artisan
という、たまーーに目にする小さなエラーです。
解決策
簡単なことで、
「artisan」コマンドを叩くディレクトリが間違っています。
「artisan」コマンドはLaravelのプロジェクトディレクトリで叩きます。
……解決。
終わりに
こんな感じの小さな記事を打ちまくります。
よろしくお願いします。
- 投稿日:2020-02-25T18:03:14+09:00
【Laravel】ユーザーをシーダーで作る
はじめに
- 業務でユーザー自身に登録させる仕様は少ない。
- コマンドラインから初期ユーザーを登録する必要がある。
- シーダーの使い方をまとめておく。
シーダーの作り方
以下のコマンドで Users テーブルのシーダーを作成できる。
php artisan make:seeder UsersTableSeeder
記述方法
ファイルは database/seeds/UsersTableSeeder.php として作成される。
<?php use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class DatabaseSeeder extends Seeder { /** * データベース初期値設定の実行 * @return void */ public function run() { DB::table('users')->insert([ 'name' => 'UserName', 'email' => 'User@mailaddress.com', 'password' => bcrypt('password'), ]); } }パスワードが bcrypt で暗号化しなければならないので、単純な insert 文ではデータを作成できない。
呼び出し
コマンドラインから呼び出せるように database/seeds/DatabaseSeeder.php にクラスを登録する必要がある。
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call([ UsersTableSeeder::class, // 呼び出すように追加 ]); } }
実行コマンド
seeder をすべて実行する。
$ php artisan db:seed特定のクラスを指定して実行する。
$ php artisan db:seed --class=UsersTableSeeder
さいごに
とにかく auth でログインを作っても、ユーザーがないとログインもできない。
[登録]を削ると新規ユーザーも登録できない。
シーダーで初期ユーザーを登録しておけば、ログインはできるし、
後でゆっくりユーザー管理機能を実装できるね。
- 投稿日:2020-02-25T14:44:31+09:00
【Laravel】ログイン廻りの日本語化
home や auth で作成されるログイン廻りの Blade テンプレート中に書かれている以下の様な記述を多言語する場合、
{{ __('Login') }}resources/lang の下に日本語訳を記載した ja.json を置く。
これを置くことで、多言語対応している部分 (__()) は軒並み日本語になる。resources/lang/ja.json
{ "Login":"ログイン", "E-Mail Address":"メールアドレス", "Password":"パスワード", "Remember Me":"ログイン状態を保存する", "Forgot Your Password?":"パスワードをお忘れですか ?", "Register":"登録", "Name":"お名前", "Confirm Password":"パスワード(確認用)", "Reset Password":"パスワードリセット", "Send Password Reset Link":"パスワードリセットリンク送信", "Logout":"ログアウト", "Verify Your Email Address":"ユーザ登録を完了してください", "A fresh verification link has been sent to your email address.":"新しいリンクをあなたのメールアドレスに送信しました。", "Before proceeding, please check your email for a verification link.":"メールに記載されているリンクをクリックして、登録手続きを完了してください。", "If you did not receive the email":"メールが届いていなければ、", "click here to request another":"こちらをクリックして再送信してください。", "Please click the link below to verify your email address.":"メールアドレスを確認するために下のリンクをクリックしてください。", "Verify Email Address":"メールアドレス確認", "If you did not create an account, no further action is required.":"心当たりがない場合は、本メッセージは破棄してください。", "Reset Password":"パスワードリセット", "Click button below and reset password.":"下のボタンをクリックしてパスワードを再設定してください。", "Reset password":"パスワードリセット", "If you did not request a password reset, no further action is required.":"心当たりがない場合は、本メッセージは破棄してください。" }