- 投稿日:2020-08-18T19:18:51+09:00
【Laravel】PostgreSQLとの接続 + DBへダミーデータをセットする
Laravelのインストール
- composerがインストールされているか確認
ターミナルcomposer --version
- Laravelプロジェクトの作成
composer create-project --prefer-dist laravel/laravel larapg
- cdコマンドで作成したプロジェクトのフォルダ内へ移動。
cd larapg
- 設定
config/app.php// 70行目 'timezone' => 'Asia/Tokyo', // 109行目 'faker_locale' => 'ja_JP',
PostgreSQLのインストール
- homebrewがインストールされてるか確認
brew -v
- pgsqlのインストール
brew install postgres
- 文字コード設定
initdb /usr/local/var/postgres -E utf8
PostgreSQLへ接続
- pgsqlを起動
postgres -D /usr/local/var/postgres
上記コマンドを起動したまま、別のターミナルを開く。
pgsqlに接続
psql postgres
- ユーザーを作る
createuser -P admin
- ユーザー一覧で確認
psql -q -c'select * from pg_user' postgres
PostgreSQLでDB生成
- DB [friends] を作る
createdb friends
- DB一覧で確認
\l
- Postico をインストール
- 起動して下の画像のように設定して、Connectをクリック。
マイグレーションを設定
php artisan make:model Models/Friend -m
- マイグレーション(
database/migrations/create_friends_table
)を、モデル(app/Models/Friend.php
)と一緒に作成します。
create_friends_table.phpSchema::create('friends', function (Blueprint $table) { $table->bigIncrements('id'); // ID $table->string('name', 30); // 名前。30文字以内。 $table->Integer('age')->nullable(); // 年齢。NULLでもOK。 $table->timestamps(); });
- 各テーブルのスキーマを上記のように編集します。
- カラム コマンド・修飾子一覧
PostgreSQLとLaravelを接続
.env(隠しファイル)DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=friends DB_USERNAME=admin DB_PASSWORD=
- Laravelの隠しファイルである .envファイルを上記のように変更。
php artisan migration
- 上記コマンドで、マイグレーションの実行します。
- Posticoを更新して、マイグレーションが通ったか確認します。
- 下の画像のように、DBの中で friendsテーブルが生成されているか確認してください。
- マイグレーションを修正したい場合は、下記コマンドを実行して、もう一度
php artisan migrate
を実行する。php artisan migration:rollback
ダミーデータの設定
- カラムに、自動でデフォルト値を設定してくれるFactoryを使用します。
php artisan make:factory FriendFactory
database/factories/FriendFactory.phpuse App\Models\Friend; // Friend のクラスを呼び出す ~ $factory->define(Friend::class, function (Faker $faker) { return [ 'name' => $faker->name, // 名前 'age' => $faker->numberBetween(18,60) // 年齢、18歳〜60歳 ]; });
- 他にも
->firstName
や->city
、->date
などがあります。- faker一覧
php artisan make:seeder FriendsTableSeeder
database/seeds/FriendsTableSeeder.phpuse App\Models\Friend; // Friend のクラスを呼び出す ~ public function run() { factory(Friend::class, 15)->create(); // friendモデルを使って、15個のランダムデータをDBに保存する。 }
database/seeds/DatabaseSeeder.phppublic function run() { $this->call(FriendsTableSeeder::class); }
ダミーデータをDBへインサート
composer dump-autoload
php artisan migrate:fresh --seed
- Posticoを確認して、下の画像の様になっていたら成功です。
- 投稿日:2020-08-18T16:39:36+09:00
Laravel(Blade)の配列をJavaScriptのオブジェクトに変換する
- 投稿日:2020-08-18T15:23:44+09:00
【学習記録】TwitterAPI+LaravelでTwitterログイン機能を実装してみた
はじめに
今回は、アプリ開発している中でTwitterログイン機能を実装したのでTwitterログイン機能実装について書いていきます。
前提
- Twitter Developer登録済み + APIKey・API SecuretKey・callbackURL取得済み
Twitter Developerのリンク
上記のサイトで、TwitterAPIを取得する必要がある。
TwitterAPIをどういった目的で使うかなどを英語で200字以上で書くことが結構大変Socialiteをインストールと使用前の設定
Laravelでは、SocialiteというものでOAuthプロバイダによる認証方法を提供している。
Socialiteは現在、Facebook、Twitter、LinkedIn、Google、GitHub、GitLab、Bitbucketによる認証をサポートしています。
Laravel7公式ドキュメントよりインストールは簡単!以下のコマンドでOK
composer require laravel/socialiteインストール後は、
config/app.php
にprovidersとaliasの設定を行う。config/app.php'providers' => [ Laravel\Socialite\SocialiteServiceProvider::class, ], 'aliases' => [ 'Socialite' => Laravel\Socialite\Facades\Socialite::class, ]次に、config/services.phpで設定を行う。
Socialiteを使用する前に、アプリケーションで使用するOAuthサービスの認証情報も追加する必要があります。認証情報はconfig/services.php設定ファイルで指定し、アプリケーションの必要に合わせ、facebook、twitter、linkedin、google、github、gitlab、bitbucketキーを使用してください。
Laravel7公式ドキュメントより公式ドキュメント感謝。
今回は、Twitterを用いるので、下記の認証情報をconfig/service.phpに追加する。
config/service.php"twitter" => [ "client_id" => env("TWITTER_API_KEY"), "client_secret" => env("TWITTER_API_SECRET"), "redirect" => env("TWITTER_CALLBACK"), ]続いて、.envファイルにてTwitterAPI KeyとTwitterAPI SecretKeyとcallbackURLを指定する。
これらは、TwitterDeveloperより取得できる!.envTWITTER_CLIENT_ID = TwitterAPI Key TWITTER_CLIENT_SECRET = TwitterAPI Secret Key CALLBACK_URL = callbackURL実際に実装していく!
まずはルーティングの実装を行います。
web.phpにて、下記ルーティングを追加web.phpRoute::get('/auth/twitter', 'Auth\TwitterController@redirectToProvider'); Route::get('/auth/twitter/callback', 'Auth\TwitterController@handleProviderCallback'); Route::get("/auth/twitter/logout","Auth\TwitterController@logout");※このとき、2番目のルーティングで指定するURLは、TwitterDeveloperで設定したcallbackURLと同じであることに注意。
次に、実際にコントローラを作成していく。
全体図は以下の通り。TwitterController.phpclass TwitterController extends Controller { //Twitterの認証ページへユーザーをリダイレクト public function redirectToProvider() { return Socialite::driver('twitter')->redirect(); } //ログイン public function handleProviderCallback() { try { //認証結果の受け取り $user = Socialite::driver('twitter')->user(); } catch (Exception $e) { return redirect('/'); } $authUser = $this->findOrCreateUser($user); Auth::login($authUser, true); return redirect()->route('home'); } //Twitterユーザー情報をもとに、ユーザー情報を取得するか新たにユーザーを作成する public function findOrCreateUser($twitterUser) { $authUser = User::where('twitter_id', $twitterUser->id)->first(); if ($authUser) { return $authUser; } //DBにユーザー情報がなければ作成する return User::create([ 'name' => $twitterUser->nickname, 'twitter_id' => $twitterUser->id, 'avatar' => $twitterUser->avatar_original, ]); } public function logout() { Auth::logout(); return redirect('/'); } }細かく説明していきます。
〇redirectToProvierメソッドTwitterController.phppublic function redirectToProvider() { return Socialite::driver('twitter')->redirect(); }こちらは、Twitter認証ページへリダイレクトする処理を記載しています。
redirectメソッドによって、ユーザーをOAuthプロバイダへ送る。
このdriverメソッド内に、githubなどを指定するとほかの認証ページに遷移できる。〇findOrCreateUserメソッド
TwitterController.phppublic function findOrCreateUser($twitterUser) { $authUser = User::where('twitter_id', $twitterUser->id)->first(); if ($authUser) { return $authUser; } //DBにユーザー情報がなければ作成する return User::create([ 'name' => $twitterUser->nickname, 'twitter_id' => $twitterUser->id, 'avatar' => $twitterUser->avatar_original, ]); }こちらでは、Twitterアカウントの情報をもとに、ユーザー情報を取得するか新しくアカウントを作成を行っている。
具体的には、Twitter_idがDB内にあれば、そのユーザー情報を返す。なければDBにアカウント情報を追加している。
〇handleProviderCallbackメソッド
TwitterController.phppublic function handleProviderCallback() { try { //認証結果の受け取り $user = Socialite::driver('twitter')->user(); } catch (Exception $e) { return redirect('/'); } $authUser = $this->findOrCreateUser($user); Auth::login($authUser, true); return redirect()->route('home'); }
Socialite::driver('twitter')->user();
でTwitterのアカウント情報を取得しています。
何らかのエラーが起きた場合は、トップページにリダイレクトします。そして、取得したアカウント情報を先ほど説明したfindOrCreateUserメソッドに渡します。
ログイン処理を行い、ホームのページにリダイレクトします。〇logoutメソッド
TwitterController.phppublic function logout() { Auth::logout(); return redirect('/'); }こちらは特に解説する箇所もなく、ログアウト処理を行いトップページにリダイレクトしています。
Twitterログインボタンの設置
こんな感じでログインボタンを設置
login.blade.php<button type="submit" class="btn twitter-btn"> <a href="/auth/twitter"><i class="fab fa-twitter"></i> Twitter Login</a> </button>Twitterのカラーコード: #00aced
こちらのカラーコードを使用すれば、Twitterログインボタンの完成!DB関連の設定
Laravelアプリケーションを作成した際に作られる、デフォルトのusersテーブルを使用する際、すこし手を加える必要があります。
というのも、もしTwitterアカウントでログインした場合、取得するデータはnickname・id・avatarの3つ。これらのカラムを新たに追加する必要がある。
また、usersテーブルではemailやpasswordが必ず必要になっているためnullableに変更する。
Laravelは、デフォルトではカラム変更のマイグレーションを行うことが出来ない。そのため新たにパッケージ(doctrine/dbal)をインストールする必要がある。
composer require doctrine/dbalあとは、変更用のマイグレーションを作成して実行すればOK。
また、User.phpにてカラムの追加もする。
User.phpprotected $fillable = [ 'name', 'email', 'password', 'twitter_id', 'avatar', ];まとめ
今回は、TwitterAPIとLaravelを用いてTwitterログイン機能を実装しました。
今までは外部API?難しそう~。と思っていましたがやってみるとそんなに難しくなかったです。(というのも、ネットで調べれば様々なサイトに詳しく書いてあるから)とても勉強になりました!
- 投稿日:2020-08-18T08:39:35+09:00
CentOS7 Laravel環境構築のためにPHP7.4をインストールする
目的
- PHPをCentOS7のマシンにインストールする方法をまとめる
実施環境
- ハードウェア環境
項目 情報 OS CentOS 7 (7.8.2003) ハードウェア Dell Studio 1537 プロセッサ Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz メモリ 4 GB DDR3 グラフィックス 不明 前提条件
- 下記、または下記に準ずる方法でCentOS7のマシンが構築されていること。
前提情報
- 説明で紹介するコマンドはクライアントPC(Mac)からSSHを用いて接続を行い実行する。
読後感
- CentOS7のPCにLaravelの環境構築を前提としたPHPをインストールすることができる。
概要
- リポジトリの追加とインストール
- 確認
詳細
リポジトリの追加とインストール
下記コマンドを実行してリポジトリを追加する。
$ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm下記コマンドを実行して必要物をインストールする。
$ sudo yum install --enablerepo=remi-php74 php74 php $ sudo yum install --enablerepo=remi-php74 php-fpm $ sudo yum install --enablerepo=remi-php74 php-mbstring $ sudo yum install --enablerepo=remi-php74 php-mysqlnd $ sudo yum install --enablerepo=remi-php74 php-pecl-zip $ sudo yum install --enablerepo=remi-php74 php-xml確認
下記コマンドを実行してphpと名前のつくインストールされたパッケージを表示する。
$ yum list installed | grep php下記に筆者の環境でのphpと名前のつくインストールされたパッケージの情報を記載する。
oniguruma5php.x86_64 6.9.5+rev1-2.el7.remi @remi-safe php.x86_64 7.4.8-2.el7.remi @remi-php74 php-cli.x86_64 7.4.8-2.el7.remi @remi-php74 php-common.x86_64 7.4.8-2.el7.remi @remi-php74 php-fpm.x86_64 7.4.8-2.el7.remi @remi-php74 php-json.x86_64 7.4.8-2.el7.remi @remi-php74 php-mbstring.x86_64 7.4.8-2.el7.remi @remi-php74 php-mysqlnd.x86_64 7.4.8-2.el7.remi @remi-php74 php-pdo.x86_64 7.4.8-2.el7.remi @remi-php74 php-pecl-zip.x86_64 1.19.0-1.el7.remi.7.4 @remi-php74 php-sodium.x86_64 7.4.8-2.el7.remi @remi-php74 php-xml.x86_64 7.4.8-2.el7.remi @remi-php74 php74.x86_64 1.0-3.el7.remi @remi-safe php74-php-cli.x86_64 7.4.8-2.el7.remi @remi-safe php74-php-common.x86_64 7.4.8-2.el7.remi @remi-safe php74-php-json.x86_64 7.4.8-2.el7.remi @remi-safe php74-runtime.x86_64 1.0-3.el7.remi @remi-safe
上記と同じパッケージがインストールできていれば本記事の作業は完了である。
参考文献
- 投稿日:2020-08-18T03:12:12+09:00
Visual Studio CodeでLaravelをリモートデバッグする設定
普段、Laravel書くのはPhpStormしか使ってないですが、VSCodeでのLaravelのリモートデバッグ設定をしてみました。
マシンスペック
- Mac mini 2018
- macOS Catalina(10.15.x)
- Intel Core-i7 3.2GHz 6コア
- メモリ 32GB
- SSD 512GB
リモート環境
- CentOS7.x
- MySQL5.7.x
- Nginx最新版
- PHP7.1.x
- Laravel5.6
- Vagrant
- Ansible
やること
- VSCodeでLaravelをリモートデバッグする
前提
- Visual Studio Codeはインストール済み
- Visual Studio Codeを日本語化済み
リモート環境を準備
【コピペ】VirtualBox+Vagrant+AnsibleでLaravel開発環境を構築その弐
デバッグするコードの準備
コード書くのが面倒だったら↓コチラを使ってください
Reactを初めて使ってCRUDアプリを作ってみた記録#サーバーの準備
$ git clone https://github.com/bobtabo/laravel5.6.git laravel5実行URL:http://laravel5.local/api/users
リモートデバッグする
拡張機能をインストール
- 拡張機能を開きます
- phpで検索します
- PHP Debugをインストールします
デバッグ設定
- デバッグするLaravelプロジェクトを開きます
- 左メニューの好きな所を右クリックします
- 実行をクリックします
- launch.json ファイルを作成しますをクリックします
- PHPをクリックします
- Laravelプロジェクトに追加されます
- launch.jsonを編集します
- "port": 9000の後ろにカンマを入力します
- "pathMappings"を追記します
"port": 9000 ↓ "port": 9000, "pathMappings": { "/home/vagrant/laravel5": "${workspaceRoot}" }デバッグ