20200818のlaravelに関する記事は5件です。

【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をクリック。
    スクリーンショット 2020-08-18 18.06.20.png


  • 下の画像のようにDBが作られているか確認します。
    スクリーンショット 2020-08-18 15.57.57.png


マイグレーションを設定

php artisan make:model Models/Friend -m
  • マイグレーション(database/migrations/create_friends_table)を、モデル(app/Models/Friend.php)と一緒に作成します。


create_friends_table.php
Schema::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テーブルが生成されているか確認してください。
    スクリーンショット 2020-08-18 16.25.16.png


  • マイグレーションを修正したい場合は、下記コマンドを実行して、もう一度php artisan migrateを実行する。 php artisan migration:rollback

ダミーデータの設定

  • カラムに、自動でデフォルト値を設定してくれるFactoryを使用します。
php artisan make:factory FriendFactory


database/factories/FriendFactory.php
use 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.php
use App\Models\Friend; // Friend のクラスを呼び出す
~
public function run()
{
    factory(Friend::class, 15)->create(); // friendモデルを使って、15個のランダムデータをDBに保存する。
}


database/seeds/DatabaseSeeder.php
public function run()
{
    $this->call(FriendsTableSeeder::class);
}


ダミーデータをDBへインサート

composer dump-autoload


php artisan migrate:fresh --seed


  • Posticoを確認して、下の画像の様になっていたら成功です。

スクリーンショット 2020-08-18 15.47.59.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel(Blade)の配列をJavaScriptのオブジェクトに変換する

メモ書きです。

Bladeのコード

<script>
    var app = <?php echo json_encode($array); ?>;
</script>
<script>
    var app = @json($array);

    var app = @json($array, JSON_PRETTY_PRINT);
</script>
<script>
    var app = {!! json_encode($array) !!}
</script>

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【学習記録】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より取得できる!

.env
TWITTER_CLIENT_ID = TwitterAPI Key
TWITTER_CLIENT_SECRET = TwitterAPI Secret Key
CALLBACK_URL = callbackURL

実際に実装していく!

まずはルーティングの実装を行います。
web.phpにて、下記ルーティングを追加

web.php
Route::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.php
class 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.php
public function redirectToProvider()
    {
        return Socialite::driver('twitter')->redirect();
    }

こちらは、Twitter認証ページへリダイレクトする処理を記載しています。

redirectメソッドによって、ユーザーをOAuthプロバイダへ送る。
このdriverメソッド内に、githubなどを指定するとほかの認証ページに遷移できる。

〇findOrCreateUserメソッド

TwitterController.php
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,
        ]);
    }

こちらでは、Twitterアカウントの情報をもとに、ユーザー情報を取得するか新しくアカウントを作成を行っている。

具体的には、Twitter_idがDB内にあれば、そのユーザー情報を返す。なければDBにアカウント情報を追加している。

〇handleProviderCallbackメソッド

TwitterController.php
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');
    }

Socialite::driver('twitter')->user();でTwitterのアカウント情報を取得しています。
何らかのエラーが起きた場合は、トップページにリダイレクトします。

そして、取得したアカウント情報を先ほど説明したfindOrCreateUserメソッドに渡します。
ログイン処理を行い、ホームのページにリダイレクトします。

〇logoutメソッド

TwitterController.php
public 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.php
protected $fillable = [
        'name', 'email', 'password', 'twitter_id', 'avatar',
];

まとめ

今回は、TwitterAPIとLaravelを用いてTwitterログイン機能を実装しました。
今までは外部API?難しそう~。と思っていましたがやってみるとそんなに難しくなかったです。(というのも、ネットで調べれば様々なサイトに詳しく書いてあるから)

とても勉強になりました!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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
グラフィックス 不明

前提条件

前提情報

  • 説明で紹介するコマンドはクライアントPC(Mac)からSSHを用いて接続を行い実行する。

読後感

  • CentOS7のPCにLaravelの環境構築を前提としたPHPをインストールすることができる。

概要

  1. リポジトリの追加とインストール
  2. 確認

詳細

  1. リポジトリの追加とインストール

    1. 下記コマンドを実行してリポジトリを追加する。

      $ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
      
    2. 下記コマンドを実行して必要物をインストールする。

      $ 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
      
  2. 確認

    1. 下記コマンドを実行してphpと名前のつくインストールされたパッケージを表示する。

      $ yum list installed | grep php
      
    2. 下記に筆者の環境での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 
      
    3. 上記と同じパッケージがインストールできていれば本記事の作業は完了である。

参考文献

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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をインストールします

スクリーンショット 2020-08-18 1.21.07.png

デバッグ設定

  1. デバッグするLaravelプロジェクトを開きます
  2. 左メニューの好きな所を右クリックします
  3. 実行をクリックします スクリーンショット 2020-08-18 1.36.43.png
  4. launch.json ファイルを作成しますをクリックします
  5. PHPをクリックします スクリーンショット 2020-08-18 1.45.02.png
  6. Laravelプロジェクトに追加されます スクリーンショット 2020-08-18 1.59.10.png
  7. launch.jsonを編集します スクリーンショット 2020-08-18 1.53.30.png
  8. "port": 9000の後ろにカンマを入力します
  9. "pathMappings"を追記します
"port": 9000
↓
"port": 9000,
"pathMappings": {
    "/home/vagrant/laravel5": "${workspaceRoot}"
}

デバッグ

  1. 行番号の左側をクリックし、ブレークポイントを設定します スクリーンショット 2020-08-18 2.03.06.png
  2. 実行メニューのデバッグの開始をクリックします スクリーンショット 2020-08-18 2.13.12.png
  3. デバッグしたいWebページにアクセスします
  4. ブレークポイントを設定した行に止まります スクリーンショット 2020-08-18 2.19.40.png
  5. ステップオーバーなどは、画面上部のバー実行メニューファンクションキーで操作します スクリーンショット 2020-08-18 2.27.41.png スクリーンショット 2020-08-18 2.25.43.png

※参考
https://qiita.com/mgmgmogumi/items/4df4cc3cffde30ed9c94

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む