20190502のlaravelに関する記事は9件です。

laravel 備忘録

composerのインストール

ninja@localhost:~$ curl https://getcomposer.org/installer | php
ninja@localhost:~$ sudo mv composer.phar /usr/local/bin/composer

unzipのインストール(laravelでプロジェクト作成時に怒られるので)

sudo apt-get install unzip

laravelでプロジェクト作成

ninja@localhost:~$ composer create-project --prefer-dist laravel/laravel website
ninja@localhost:~$ sudo chmod -R 755 website/storage/

nginxのroot変更

/etc/nginx/sites-available/default.
ninja@localhost:~$ sudo vi /etc/nginx/sites-available/default

root /home/ninja/website/public;

nginxを再起動
ninja@localhost:~$ sudo service nginx restart

ブラウザからアクセスする。
http://xxx.xxx.xxx.xxx

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

[忘備録]laravel5.5 データベースjoin 結合

laravelを用いて初めてデータベースの結合をしてみると、想像以上に簡単だったので、忘備録として残しておこうと思う。

前提

データベースにlaravelデフォルトの users に加え、  id, uesr_id, text カラムを含む posts テーブルを用意する。

postsテーブルを作成する際はマイグレーションファイルで user_id カラムを次のように設定する。

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');

流れ

①モデル設定
②コントローラーから使う

①モデル設定

今回はユーザーが複数のpostを持つというで、以下のような関係になります。

user has many posts
posts belongs to user

この点を踏まえて、 User.php, Post.php に以下のコードを追記。

User.php
public function posts() {
        return $this->hasMany('App\Post');
    }
Post.php
public function user() {
        return $this->belongsTo('App\User');
    }

これで準備は整いました。

②コントローラーから使う

今回はコントローラーで確認用 unction join() という関数を作ります。

Post.php
function join() {
        #postsテーブルのuser_idが1のレコードを全て取得
        $user = User::find(1);
        $posts = $user->posts; 

        #postテーブルのデータを全て取得
        $posts = Post::all();

        #上記で取得した「postsテーブルのuser_idが1のレコード」をひとつずつ表示
        foreach ($posts as $post) {
            echo $post . "<br/>";
        }

        #上記で取得した「postテーブルのデータ」から結合されたユーザーの名前をひとつずつ表示する。
        foreach ($posts as $post) {
            echo $post->user->name . "<br/>";
        }

    }

これで、適当にルート設定をし、うまく表示されていることを確認することができました。

おかしな部分がある場合、指摘していただけるとありがたいです。

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

el・data・データバインディング・リスト(Laravel使用Vue.js入門)#1

◆Vue.js利用準備

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

CDNを利用することで、ファイルをvue.jsのファイルをダウンロードすることなく利用できます。

◆データバインディング(表示しているものとデータの同期)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>Vue.js</title>
    <link href="{{ asset('css/app.css') }}" rel="stylesheet" type="text/css">
</head>
<body>
    <div id="app">
        <h1>@{{ message }}</h1>
    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const vue = new Vue({
        el: '#app',
        data: {
            message: 'Hello Vue.js!!'
        }
    });
</script>

僕は、laravelのbladeを利用させていただいているため、\@{{message}}と指定しておりますが、bladeを使用されていない方は{{message}}で動作すると思います。

new Vue({})でVueインスタンスを作成して、その中のオプションを指定することでVueアプリケーションを作成することができます。

elは、DOM要素のセレクタを指定します。ちなみにクラスでも指定できます。マウントと言ったりします。

dataは、上のel内で指定した範囲内で利用するデータをもつ変数です。

今回の場合ですと、画面にHello Vue.js!!がデータバインディングにより表示されます。
また、messageの内容を変えると画面に表示される文字も変更されます。これをリアクティブといいます。

バインディングは属性やクラスやスタイルも指定可能です。

◆リスト

<body>
    <div class="app">
        <ol>
            <li v-for="fruit in fruitList">
                @{{fruit}}
            </li>
        </ol>
    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const vue = new Vue({
        el: '.app',
        data: {
            fruitList:[
                'ミカン', 'メロン', 'ブドウ'
            ]
        }
    });
</script>

v-forディレクティブを使うと、簡単にリストを配列内のデータを利用し、使用することができます。

◆イベント・条件分岐

先ほどのリストを条件分岐で表示非表示を切り替えてみる

<body>
    <div class="app">
        <ol>
            <li v-for="fruit in fruitList" v-if="show">
                @{{fruit}}
            </li>
        </ol>
        <button v-on:click="handleClick">表示切替</button>
    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const vue = new Vue({
        el: '.app',
        data: {
            fruitList: [
                'ミカン', 'メロン', 'ブドウ'
            ],
            show: true
        },
        methods: {
            handleClick: function () {
                this.show =! this.show
            }
        }
    });
</script>

v-onディレクティブを使用することで、DOMのイベントを検知できます。
v-on:clickの中に処理を記述することも可能ですが、処理は分けて記述するほうが良いと思います。this.showはdata内のshowを指しております。
elで指定した範囲内で利用するメソッドを、methodsプロパティ内で記述します。今回なら、showの切り替えです。
v-ifディレクティブはtrueだと、DOMに読み込まれますが、falseだとDOMから削除されます。また、これと似たもので、v-showディレクティブがあるのですが、こちらは削除されず、非表示になります。

◆参考にさせていただいた記事

公式ページ
基礎から学ぶVue.js
データバインディングとは
vue.js入門

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

Laravelとdockerの開発環境でMailHogを使ってメール送信する

Laravelでメールを送信するアプリケーションを開発している間は、実際のメールアドレスにメールを送信したくはありません。ローカルでの開発環境ではMailHogを使って、「ダミー」のメールボックスへメールメッセージを送る方法がとても便利です。

以前の Laravel5の環境をdockerで構築した記事 の続きです。

環境

  • Laravel 5.8.3
  • PHP 7.3.4

Laravel環境構築してテストメールを送信するまで

$ git clone git@github.com:ucan-lab/docker-laravel5.git
$ cd docker-laravel5
$ docker-compose up -d --build
$ docker-compose exec app composer create-project --prefer-dist "laravel/laravel=5.8.*" .

ここまでのコマンドでLaravelの環境構築が完了です。

$ docker-compose exec app ash
$ sed -i -e "s/MAIL_HOST=.*/MAIL_HOST=mail/" .env
$ sed -i -e "s/MAIL_PORT=.*/MAIL_PORT=1025/" .env

$ php artisan tinker
Mail::raw('test mail',function($message){$message->to('test@example.com')->subject('test');});

.envMAIL_HOSTMAIL_PORT の設定を書き換えます。
tinkerを起動して、テストメールを送信してみます。

http://127.0.0.1:3504

スクリーンショット 2019-05-02 1.04.12.png

テストメールを受信できていればokです。

MailHog とは

MailHogは開発者向けの電子メールテストツールです。
Laravelで送信したメールの内容をブラウザ上で確認できます。
宛先に設定した実際のメールアドレス宛には送信されません。

Homebrewでインストールできたり、DockerHubにイメージが公開されているので導入が非常に簡単です。

  • SMTPサーバーの標準ポートは 1025
  • HTTPサーバーの標準ポートは 8025
  • メモリ内のメッセージストレージを使用(コンテナを再起動するとクリアされる)
  • 届いたメールはほぼリアルタイムで受信トレイに表示

docker-compose.yml の設定例

実際の設定はこちらのご参考ください。
https://github.com/ucan-lab/docker-laravel5/pull/8/files

DockerHubにMailHogのイメージが登録されているので、
docker-compose.yml で指定すると簡単に導入できます。

# docker-compose.yml

  mail:
    image: mailhog/mailhog
    ports:
      - ${MAILHOG_PORT}:8025

Laravel側の .envMAIL_HOST には コンテナ名を指定します。
MAIL_PORT には MailHog の SMTP のポート番号を指定します。

# .env

MAIL_HOST=mail
MAIL_PORT=1025

参考

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

Laravelのtrait Macroableを使って動的にメソッドを追加する

Macroableとは

Laravelをインストールしたときに一緒にインストールされるtraitです。

vendor\laravel\framework\src\Illuminate\Support\Traits\Macroable.phpにあります。

Macroableをuseするとそのクラスは定義されたクラス以外でも動的にメソッドを追加できるようになります。

ソースそのものは108行しかないのでシンプルです。

以下メソッド

public static function macro($name, $macro)
public static function mixin($mixin)
public static function hasMacro($name)
public static function __callStatic($method, $parameters)
public function __call($method, $parameters)

仕組みとしてはmacro()でメソッド名と実行する内容を登録して、マジックメソッドの __call() か __callStatic() で使えるようにするといったものです。

hasMacro()は名前の通りmacro()で登録してあるかチェックするためのメソッドです。

mixin()は5.5から追加されました。名前で推測できるように引数にインスタンスを渡して、そのインスタンスのメソッドを使えるようにするためのものと判断出来ます。
ですが、癖が強いので使い勝手が良いかどうかは疑問です。後述します。

使い方

class Human{
    use \Illuminate\Support\Traits\Macroable;
    public function punch(){
        echo "パンチ";
    }
}
Human::macro('kick', function(){
    echo "キック";
});
$human = new Human();
$human->punch();
$human->kick();

//結果 パンチキック

Laravelで使うときはProviderで登録するのがまとまりがあって良いでしょう。

mixin()の使い方

まずはmixinメソッドがどのように定義されているか見てみましょう。

public static function mixin($mixin)
{
    $methods = (new ReflectionClass($mixin))->getMethods(
        ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED
    );

    foreach ($methods as $method) {
        $method->setAccessible(true);
        static::macro($method->name, $method->invoke($mixin));
    }
}

リフレクションを使い、public,protectedのメソッドの一覧を取得してforeachでmacro()で登録する流れになっています。
ですが見てください。macroメソッドの第二引数の渡し方。

$method->invoke($mixin)

普通にメソッドの呼び出しをしています。
もしも直感的にメソッドを使うなら次のように間違って書いてしまうでしょう。

class Cat{
    public function say(){
        echo "にゃー";
    }
}

Human::macro('kick', function(){
    echo "キック";
});
Human::mixin(new Cat());
$human = new Human();

$human->punch();
$human->kick();
//$human->say(); BadMethodCallExceptionが発生する 

//結果 にゃーパンチキック

say()を呼び出していないのに にゃー と鳴いてしまってます。
say()を呼び出すとBadMethodCallExceptionになります。

どう解決しましょうか。
答えはシンプルです。

say()メソッドの返り値をクロージャーにします。

class Cat{
    public function say(){
        return function(){
            echo "にゃー";
        };
    }
}

このように定義すればsay()を呼び出してもBadMethodCallExceptionが発生しません。
結果はパンチキックにゃーの順で呼び出されます。

mixin()は無名クラスを使って登録するのがベターな気がします。

Human::mixin(new class{
    public function say(){
        return function(){
            echo "にゃー";
        };
    }
});

Macroableの使い所は?

第三者に拡張性のあるクラスを提供したい!といった場合くらいですかね。
自分で率先して使う場面というのはあんまり無いでしょう。
バグの原因になりそうです。

実際の用途としてはLaravelで定義してあるクラスを拡張するのに使用するといったところでしょうか。

余談

日付操作ライブラリのCarbonにも同じようなMacroableのようなコードがあります。

個人的にマジックメソッドの __call() や __callStatic() はソースが追いにくくなるため苦手です。

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

Laravelチュートリアル - 汎用業務Webアプリを作る(1/4) Laradockで環境構築

はじめに

これまで私はDjangoでいくつかのWebアプリを作ってきましたが、とある事情から今後Laravelに触れる必要が出てきました。

そこで、既存のDjangoアプリをLaravelで再現するチュートリアル記事を作成し、その過程を通してLaravelについて学ぶことにしました。

題材には、CRUD機能、検索機能、認証機能を持ち、Djangoを勉強する際にも大変お世話になった、下記Webアプリとさせていただきました。

Djangoチュートリアル - 汎用業務Webアプリを最速で作る - Qiita

チュートリアル全体の構成

  1. Laradockで環境を構築する(本記事

  2. テーブルとCRUD画面を作る

  3. 検索機能を作る(作成予定)

  4. 認証機能を作る(作成予定)

環境

  • macOS High Sierra 10.13.6
  • php 7.2.16
  • Laravel 5.5.45
  • PostgreSQL 9.6.2

1. Laradockで環境構築する

Laradockのコピー

プロジェクトのルートとなるディレクトリに、Laradockをコピーします。

$ git clone https://github.com/Laradock/laradock.git

laradockディレクトリ配下のenv-exampleファイルをコピーし、.envファイルを作成します。

$ cd laradock
laradock $ cp env-example .env

PostgreSQLのバージョンの指定

PostgreSQLは9.6.12を使用することにします。
PostgreSQLのDockerファイルを以下の通り編集します。

laradock/postgres/Dockerfile
FROM postgres:9.6.12

LABEL maintainer="Ben M <git@bmagg.com>"

CMD ["postgres"]

EXPOSE 5432

コンテナの起動

コンテナを起動します。

laradock $ docker-compose up -d --build workspace postgres php-fpm nginx

Laravelのインストール

Laravelをインストールします。

まず、起動したコンテナの中に入ります。

laradock $ docker-compose exec workspace bash

続いて、Laravelをインストールします。
バージョンは5.5.*にします。
また、Laravelとしてのプロジェクト名は、srcにします。

/var/www# composer create-project --prefer-dist laravel/laravel src "5.5.*"

データベースを作成する

コンテナの中に入ったまま、今度はPostgreSQLに接続し、データベースを作成します。

まず、PostgreSQLに接続します。

/var/www# psql -U default -h postgres

パスワードを入力します。

Password for user default: 

続いて、データベースを作成します。
データベース名は、sampleにします。

default=# create database sample;

PostgreSQLとの接続を終了します。

default=# \q

Laravelのタイムゾーンを日本時間にする

Laravelのタイムゾーンを日本時間にします。

src/config/app.php
<?php
return [
//略
  'timezone' => 'Asia/Tokyo',
//略
];

.envファイルの編集

Laravelの.envファイルを編集し、LaravelからPostgreSQLに接続できるようにします。

src/.env
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=sample
DB_USERNAME=default
DB_PASSWORD=secret

最後に

以上で環境構築は完了です。

次の記事では、テーブルとCRUD画面の作成を行います。

参考

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

Laravel + Heroku (on Vagrant)を最初から

はじめに

Laravelを使って開発がしたい。本番デプロイのデモをHerokuでさくっと行いたい。
そんな私の需要に答えて、手順をまとめてみました。

前提

  • Herokuにユーザ登録済
  • VirtualBox, Vagrantをインストール済 (vagrant v2.2.4)
  • Laravel Homesteadを使います
  • 実行環境はwindows10使っています(macでも大丈夫)

Homestead


Homesteadとは

Laravelをすぐに使える環境を提供してくれる優れたツールです。

HomesteadはWindowsやMac、Linuxシステム上で実行でき、Nginx WebサーバとPHP7.2、PHP7.1、PHP7.0、PHP5.6、MySQL、PostgreSQL、Redis、Memcached、Node、他にも素晴らしいLaravelアプリケーションを開発するために必要となるものすべてを含んでいます。


公式通りにHomesteadのBOXを追加し、ソースをクローンします。

hostOS
vagrant box add laravel/homestead
git clone https://github.com/laravel/homestead.git ~/Homestead

Homesteadのバージョンはこの時点で最新のタグを使用しています。

hostOS
cd ~/Homestead
git tag --list
> etc...
> v8.1.0
> v8.2.0
git checkout v8.2.0
# 設定ファイルの生成
bash init.sh

設定ファイルの変更

Homestead.yaml
# mariaDBを使う場合は追記
mariadb: true

folders:
    - map: C:/Site/
      to: /home/vagrant/code

sites:
    - map: homestead.test
      to: /home/vagrant/code/homestead/public
    - map: laravelapp.test
      to: /home/vagrant/code/laravelapp/public

databases:
    - homestead
    - laravelapp

私の場合はCドライブ直下にSiteディレクトリを作成し、その中に各プロジェクトをまとめています。
sitesでは上記のように複数設定することができますので、to: /home/vagrant/codeより使いやすいです。

Homesteadを立ち上げます。

hostOS
vagrant up --provision

ただ通常、作業は各プロジェクトで行うため、どこからでも起動できることが望ましいです。
エイリアスを登録しておくと捗るでしょう。

hostOS
alias homestead='function __homestead() { (cd ~/Homestead && vagrant $*); unset -f __homestead; }; __homestead'

コマンド自体はvagrantと同じです。

hostOS
# vagrant upが済んでいたら実行しなくていいです
homestead up --provision

起動には時間がかかりますので、今のうちにプロジェクトに移動します。
そしてエディタを立ち上げます(VsCode使っています)。

hostOS
cd /C/Site/homestead
code .

Ctrl+@を叩いてターミナルを開きます(Mac:Ctrl+Shift+@)。
windowsの場合はGitBashが開くようにしておくと少し幸せかもしれません。

今のうちにhostsの設定もしておきます。

windows
powershell -NoProfile -ExecutionPolicy unrestricted -Command "start notepad C:\Windows\System32\drivers\etc\hosts -verb runas"

windowsはwindowsキー+Rを押してコピペすると管理者権限でファイルを開くことができます。
macの場合はターミナルのまま普通に開きます。

mac
sudo vi /etc/hosts

hosts設定

hosts
# Homestead.yamlでIP変更できます
192.168.10.10 homestead.test

さて、仮想環境が起動したらゲストにSSH接続します。

hostOS
homestead ssh

「homestead」と大きな文字で迎えられたら成功です。

laravelプロジェクトを立ち上げる

まずはプロジェクトに移動します。

guestOS
cd ~/code/homestead

Laravelのプロジェクトを作成します。今回は5.7にします。

guestOS
composer create-project laravel/laravel ./ --prefer-dist "5.7.*"

起動したら一度、アクセスしてみます。表示されました。

ここでGit管理しておくといいと思います。

guestOS
git init
git add .
git commit "first commit"

windowsの場合、.gitattributes* text=autoをコメントアウトしてしまいますがどうなんでしょうね(ひとりごと)。

Herokuにログインする

homestead環境でHerokuにデプロイしたいと思います。
herokuをCLIで操作するためのコマンドを実行します。

guestOS
sudo snap install heroku --classic

herokuにログインします。「なにかキーを押してね」と言われるので押します。

guestOS
heroku login
> heroku: Press any key to open up the browser to login or q to exit:

すると、herokuのログイン画面がブラウザで自動的に開きます。
…ゲスト側なので開きませんね。
開かない場合も、下記のようなメッセージが出てきますので、指定URLに手動でアクセスしましょう。

guestOS
Warning: Cannot open browser. Go to https:<ごにょごにょ>

これでHerokuにログインできました。

Herokuにデプロイ

デプロイする前にProcfileを作成する必要があります。
linuxのpsコマンドで確認できるようなプロセスを起動できるみたいです。
詳しく知りたい方は公式へゴーゴゴー!

The Procfile | Heroku Dev Center

今の私のざっくりした認識は「WEBサーバを○○で起動するためのコマンド」です。
今回はwebサーバにapacheを使用しますので、下記のように記述します。

web: vendor/bin/heroku-php-apache2 public/

ちなみにpublic/はバーチャルホストで設定するときのドキュメントルート指定みたいなものなので、記述しない場合はhomestead.test/publicにアクセスしないと表示されませんし、色々不都合が起きます。

さて、再度コミットした後、プロジェクトをherokuと関連付けます。

guestOS
heroku create
# または任意の名前でcreate
heroku create homestead

これでgit remote -vでリモート情報にherokuが追加されていることが分かるでしょう。
あとは下記コマンドでデプロイをします。

guestOS
git push heroku master

このコマンド時に色々と処理が走っているのが目で見て分かると思います。
ここで内部的にアプリをビルドしているのですが、herokuは自動でコードを認識し、適切なビルドを行ってくれます。
ですが、phpとnode.jsなどのソースが混在していると誤認識される場合もあるようです。
その場合は下記のようにオプションを指定するか、

guestOS
heroku create --buildpack heroku/php

buildpacks:setコマンドで後付けの指定をしましょう。

guestOS
heroku buildpacks:set heroku/php

確認すると、適切なビルドが指定されていると思います。

guestOS
heroku buildpacks
> heroku/php

さて、デプロイが問題なく終わったところでブラウザで確認します。
…映っていませんので最後の仕上げを行います。

Herokuでアプリ設定

Laravelプロジェクトを生成した際に.envファイルもさり気なく生成されています。
.envは環境ごとに設定するファイルのため.gitignoreで管理除外されています。
そのため、下記のようにHeroku用の設定をする必要があります。

guestOS
heroku config:set APP_NAME=Homestead
heroku config:set APP_KEY=$(php artisan key:generate --show)
heroku config:set APP_URL=https://homestead.herokuapp.com
heroku config:set SESSION_DRIVER=file

これで私の場合、正常に映りました。

最後に

公式サイトを見れば、どこかに載っている情報だったりしますが、最初はコマンドも暗記できていないのであちこち見に行って時間を消費ばかりしました。需要があるか分かりませんが、きっと未来の私はこれを見て喜ぶと思いますので書いてよかった。どや。

※サンプルとしてhttps://homestead.herokuapp.comなどと記述していますが、実際にはhomesteadは作成していません。もし参考にされる場合は、各々頭で置き換えて実行してください。

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

Homestead MailHog を利用する

Laravel 簡単なアプリケーション作成(2)

イベントを利用して会員登録時にメールを送る機能を追加

Laravelを利用して簡単なアプリケーションを作成する手順

今回はイベントを使用して会員登録時にメールを送信する機能を追加する

イベントとは、プログラムで発生する様々な事象を別のオブジェクトに通知し、その事象に対応した処理【リスナー】を実行する機能。

環境

前回までの環境を利用する

手順概要

  1. メール送信設定
  2. イベントとリスナーファイルの設定
  3. リスナークラスの実装

メール送信設定

Homesteadに同梱される"MailHog"というSMTPサーバを使用する。

管理画面は
http://homestead.test:8025 にアクセスすることでGUI表示できる。

sampleapp/.env を編集

sampleapp/.env
MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

リスナーファイルの設定

通常、イベントとリスナーの実装が必要だが、イベントはLaravelに含まれるものを利用するためリスナーのみ実装する。
下記ファイルに追加してリスナーを定義する。

app/Providers/EventServiceProvider.php
protected $listen = [
    Registered::class => [
        SendEmailVerificationNotification::class,
    ],
    'App\Events\Event' => [
        'App\Listeners\EventListener',
    ],
    'Illuminate\Auth\Events\Registered' => [
        'App\Listeners\RegisteredListener', 
    ],
];

sampleappディレクトリに移動し、下記コマンドを実行してリスナークラスを作成する。

app以下にListenerディレクトリが生成され、EventListener.php, RegisterListener.phpが生成されている。

$ php artisan event:generate
Events and listeners generated successfully!
$

生成されてるか確認

$ ls app/
Console     Events      Exceptions  Http        Listeners   Providers   User.php
$ tree -L 1 app/Listeners/
app/Listeners/
├── EventListener.php
└── RegisteredListener.php

0 directories, 2 files
$

リスナークラスの実装

Listeners/RegisteredListenered.php に処理を追加

Listeners/RegisteredListenered.php
<?php

namespace App\Listeners;

// add for mailer
use App\User;
use Illuminate\Auth\Events\Registered;
use Illuminate\Mail\Mailer;

use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class RegisteredListener
{
    private $mailer;
    private $eloquent;

    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct(Mailer $mailer, User $eloquent)
    {
        $this->mailer = $mailer;
        $this->eloquent = $eloquent;
    }

    /**
     * Handle the event.
     *
     * @param  Registered  $event
     * @return void
     */
    public function handle(Registered $event)
    {
        $user = $this->eloquent->findOrFail($event->user->getAuthIdentifier());
        $this->mailer->raw('会員登録完了しました。', function($message) use ($user){
            $message->subject('会員登録メール')->to($user->email);
        });
    }
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaradockでLaravel Mixを行う際の注意点

LaravelのLaravel Mixでスタックしたことのまとめ

  • npm run watch が動作しない。

laradockはdocker上で動いているため、npm run watchをしただけではダメ。

npm run watch-poll

これを入力する必要がある。

参考

「Laravel mix事始め」
https://qiita.com/ryosukes/items/24a556b9e634c183f93b

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