20200316のlaravelに関する記事は8件です。

php artisan ui vue --authコマンドの恐怖

とある日僕はlaravelを使って作った自作アプリに、ログイン機能をつけようと思いついた。
よしよし、公式ドキュメントによると、このコード一発でログイン機能ができるらしい。。
チャカチャカ、ぽん!
php artisan ui vue --auth

ブイーーん、種ドドドドー
laravelは唸りをあげ、ログイン機能、ユーザー登録機能を一瞬で作り上げ、同時に、resoureces/以下に書いていた僕のコードも見事に書き換えてしまった。
何してくれんだ、馬鹿野郎!

laravelは言った、私は規則に従ったまでです。
何、規則だと!と、手渡されたドキュメントをよく読むと、(小さく)「このコマンドは新しくインストールしたアプリケーションでのみ実行すべきで、・・・」と書いてある。
いや、もっと早く言えよ。
僕は、laravelランドに暮れる夕日を眺めながら、吐息をついたのだった。

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

Laravelのbladeで分岐する場合

概要

@if @elseif @else @endif ディレクティブが使用できます。
ifの他に三項演算子も使用できます。

使用例

@php
  $name = "太郎";
@endphp

<p>
    @if ($name)
    {{ $name."さん" }}
    @else
    {{ "未設定" }}
    @endif
</p>

太郎さんが表示

@php
  $name = "太郎";
@endphp

<p>
    {{ $name ? $name."さん" : "none" }}
</p>

太郎さんが表示

@php
  $name = null;
@endphp

<p>
    {{ $name ?? 'none' }}
</p>

noneが表示

@php
  $name = "";
@endphp

<p>
    {{ $name ?: 'none' }}
</p>

noneが表示
nullの場合はUndefined variable

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

Laravel6.xの日本語化パッケージ

目的

Laravel6.xの日本語化を行い、その言語リソースをパッケージ化してみる。

日本語化について

Laravel 6.x 多言語化

設定

config/app.php

    'locale' => 'en',

英語→日本語

デフォルトでは次の4種類が用意されている。

  1. 認証(auth.php)
  2. ページネーション(pagination.php)
  3. パスワードリセット(passwords.php)
  4. バリデーション(validation.php)

resources/lang/en以下に対応するphpファイルがあるので、それを翻訳してresources/lang/ja以下へ置く。

パッケージ化について

毎回翻訳するのは大変なのでパッケージ化してみる。

Laravel 6.x パッケージ開発

ServiceProviderで作成した日本語化ファイルを公開できるようにする。

    public function boot()
    {
        $this->publishes([
            __DIR__.'/../resources/lang' => $this->app->resourcePath('lang/'),
        ], 'lang-ja');
    }

vendor:publishコマンドで公開できるようになる。

$ php artisan vendor:publish --tag=lang-ja

作成した日本語化パッケージ

blue32a/laravel-language-ja

ほぼGoogle翻訳なので使いつつ調整していく予定。

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

Laradockをやる時にコンテナがdocker-composeでもなかなか立ち上がってくれなかった話

Laradockを使っての環境構築にチャレンジしてみました。
Windows10 homeを使っているので、Docker for Desktopは使えず、
かつInsider Previewには切り替えたくないなと思いましたので、
Docker Toolboxをインストール!

https://docs.docker.com/toolbox/toolbox_install_windows/

こちらリンクですが、入ってみても分かる通り、非常にわかりにくいUIですが頑張ってインストールしましょう。
その際に、gitとvirtual boxがインストールしますかと選択肢がでますが、
すでにインストールしている人はダブルと不具合になるのでチェックは外しておきましょう。

インストール完了するとDocker Quickstart Terminalgが使えるのでクリックして起動。
初回はけっこう時間がかかります。
終了したら、おなじみのクジラのAAとIPアドレスが採番されて完了です。

実際にVirtual Boxを開いてみてみると、「default」というボックスが立ち上がっているのが見てわかります。

その後、任意のターミナル(せっかく開いているのでDocker Quickstart Terminalでよいかと)で

$ docker --version

と入力するとバージョンが返ってきたらインストール完了です。

続いて任意のディレクトリ(僕はいつもCフォルダ直下に作っています)で

/c
$ mkdir docker-workspace

と打って作業用フォルダを作りましょう。

/c
$ cd docker-workspace

でそこに移動して、Laradockをインストールします。

docker-workspace
$ git clone https://github.com/Laradock/laradock.git
$ ls
> laradock
$ cd laradock

次にenvファイルの名前を書き換えます。

laradock
$ cp env-example .env

ここまでできたら、いよいよコンテナを立ち上げていきます。

laradock
$ docker-compose up -d nginx mysql phpmyadmin workspace

こちらもプロセスにかなりの時間が初回はかかります。
そして、ほとんどの方は問題なく終了するかと思いますが、
私の場合は、こんなエラーがでてきました。

Starting phpmyadmin ... error

ERROR: for phpmyadmin  Cannot start service phpmyadmin: driver failed programming external coStarting phpmyadmin ... error
006): Bind for 0.0.0.0:8080 failed: port is already allocated

ERROR: for workspaceCannot start service workspace: driver failed programming external connectivity on endpoint workspace(xxxxxxxxx): Bind for 0.0.0.0:8080 failed: port is already allocated

どうやら、ポートが被っている??
一旦、再起動してみたり、コンテナを削除して作り直しても無駄なうえ、
lsofコマンドができず、起動しているファイルをkillすることもできなかったので、
.envファイルを編集することにしました。

.env
### WORKSPACE #############################################

WORKSPACE_COMPOSER_GLOBAL_INSTALL=true
WORKSPACE_COMPOSER_AUTH=false
WORKSPACE_COMPOSER_REPO_PACKAGIST=
WORKSPACE_NVM_NODEJS_ORG_MIRROR=
WORKSPACE_INSTALL_NODE=true
WORKSPACE_NODE_VERSION=node
WORKSPACE_NPM_REGISTRY=
WORKSPACE_INSTALL_YARN=true
WORKSPACE_YARN_VERSION=latest
WORKSPACE_INSTALL_NPM_GULP=true
WORKSPACE_INSTALL_NPM_BOWER=false
WORKSPACE_INSTALL_NPM_VUE_CLI=true
WORKSPACE_INSTALL_NPM_ANGULAR_CLI=false
WORKSPACE_INSTALL_PHPREDIS=true
WORKSPACE_INSTALL_WORKSPACE_SSH=false
WORKSPACE_INSTALL_SUBVERSION=false
WORKSPACE_INSTALL_BZ2=false
WORKSPACE_INSTALL_GMP=false
WORKSPACE_INSTALL_XDEBUG=false
WORKSPACE_INSTALL_PCOV=false
WORKSPACE_INSTALL_PHPDBG=false
WORKSPACE_INSTALL_SSH2=false
WORKSPACE_INSTALL_LDAP=false
WORKSPACE_INSTALL_SOAP=false
WORKSPACE_INSTALL_XSL=false
WORKSPACE_INSTALL_SMB=false
WORKSPACE_INSTALL_IMAP=false
WORKSPACE_INSTALL_MONGO=false
WORKSPACE_INSTALL_AMQP=false
WORKSPACE_INSTALL_CASSANDRA=false
WORKSPACE_INSTALL_GEARMAN=false
WORKSPACE_INSTALL_MSSQL=false
WORKSPACE_INSTALL_DRUSH=false
WORKSPACE_DRUSH_VERSION=8.1.17
WORKSPACE_INSTALL_DRUPAL_CONSOLE=false
WORKSPACE_INSTALL_WP_CLI=false
WORKSPACE_INSTALL_AEROSPIKE=false
WORKSPACE_INSTALL_OCI8=false
WORKSPACE_INSTALL_V8JS=false
WORKSPACE_INSTALL_LARAVEL_ENVOY=false
WORKSPACE_INSTALL_LARAVEL_INSTALLER=false
WORKSPACE_INSTALL_DEPLOYER=false
WORKSPACE_INSTALL_PRESTISSIMO=false
WORKSPACE_INSTALL_LINUXBREW=false
WORKSPACE_INSTALL_MC=false
WORKSPACE_INSTALL_SYMFONY=false
WORKSPACE_INSTALL_PYTHON=false
WORKSPACE_INSTALL_POWERLINE=false
WORKSPACE_INSTALL_SUPERVISOR=false
WORKSPACE_INSTALL_IMAGE_OPTIMIZERS=false
WORKSPACE_INSTALL_IMAGEMAGICK=false
WORKSPACE_INSTALL_TERRAFORM=false
WORKSPACE_INSTALL_DUSK_DEPS=false
WORKSPACE_INSTALL_PG_CLIENT=false
WORKSPACE_INSTALL_PHALCON=false
WORKSPACE_INSTALL_SWOOLE=false
WORKSPACE_INSTALL_TAINT=false
WORKSPACE_INSTALL_LIBPNG=false
WORKSPACE_INSTALL_IONCUBE=false
WORKSPACE_INSTALL_MYSQL_CLIENT=false
WORKSPACE_INSTALL_PING=false
WORKSPACE_INSTALL_SSHPASS=false
WORKSPACE_INSTALL_INOTIFY=false
WORKSPACE_INSTALL_FSWATCH=false
WORKSPACE_INSTALL_YAML=false
WORKSPACE_INSTALL_MAILPARSE=false
WORKSPACE_PUID=1000
WORKSPACE_PGID=1000
WORKSPACE_CHROME_DRIVER_VERSION=2.42
WORKSPACE_TIMEZONE=UTC
WORKSPACE_SSH_PORT=2222
WORKSPACE_INSTALL_FFMPEG=false
WORKSPACE_INSTALL_WKHTMLTOPDF=false
WORKSPACE_INSTALL_GNU_PARALLEL=false
WORKSPACE_INSTALL_AST=true
WORKSPACE_AST_VERSION=1.0.3
WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8008 #ここ、8080になってたので適当な番号に書き換えました!
WORKSPACE_VUE_CLI_UI_HOST_PORT=8001
WORKSPACE_INSTALL_GIT_PROMPT=false

これでコマンドをやり直したらできました!!

docker-compose up

とだけやってしまうと、容量不足になってしまい、

ERROR: Service 'web' failed to build: failed to copy files: failed to copy directory: Error processing tar file(exit status 1): open /node_modules/hosted-git-info/CHANGELOG.md: no space left on device

みたいな感じでエラーになってしまうので、立ち上げるコンテナを-dで指定しましょう。
立ち上げた後は、

laradock
$ docker-compose exec workspace bash

と打ってワークスペースに接続します。ディレクトリがroot@var/wwwみたいな感じに変わったら成功。いつもやるようにプロジェクトをコマンドを打って作りましょう。

laradock
$ composer create-project --prefer-dist laravel/laravel #アプリ名

またこれで少しの間完了するまで放置します。

root@var/www
$ ls
>laradock #アプリ名

できたらexitで接続を終了します。

laradock
$ cd nginx/sites/

最後にnginxの設定ファイルを編集します。

laradock/nginx/sites
$ cp default.conf default.conf.backup   
$ cp laravel.conf.example default.conf
$ vim default.conf
defalut.conf
server {

    listen 80;
    listen [::]:80;

    # For https
    # listen 443 ssl;
    # listen [::]:443 ssl ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    server_name laravel.test;
    root /var/www/laravel/#ここにアプリ名を入れる!/public;
    index index.php index.html index.htm;

laradockに戻って $docker-compose restartをして、
Docker Quickstart Terminal起動時に出るIPアドレスをブラウザで入力すると、
Laravelトップページがでます。

これで、環境構築は完了です!

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

AWSで作ったLaravelアプリケーションをXserverにデプロイする

はじめに

タイトル通りですが、LaravelアプリケーションのデプロイをXserverで試してみました。

AWSでアプリケーションは作成したのですが、
XAMPPで作成した方も以下のやり方でできると思います。

まとめ

さっそくですがやり方を以下にまとめました。

※XAMPPでアプリケーションを作成した方は⑥以降を参考にしていただければと思います。

①AWSでLaravelアプリケーションを作成。

②作成したアプリケーションのフォルダをダウンロードしてXAMPP環境下(htdocs内)に保存する。

③XAMPPでphpMyAdminを起動。アプリケーション用のDB(DB名:laravel)を作成する。

④.envをXAMPP環境下でDBが使えるようにに編集。

.env
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

⑤コマンドプロンプトで同フォルダに移動してテーブル作成

$ cd 作成したアプリのフォルダ
$ php artisan migrate//このコマンドでテーブルが作成されます。

⑥FTP(FileZillaを使用しました)で転送したいドメイン内のpublic_htmlへ作成したアプリのpublic内のファイルをすべて転送

⑦publicフォルダ以外のファイルをまとめて新しく作ったフォルダに転送(public_htmlと同じ階層下)

フォルダ名はlaraveltestとしました。
コメント 2020-01-22 230052.png

⑧public_htmlに転送したindex.phpのrequire先を新しく作ったフォルダ先に変更

index.php
require __DIR__.'/../laraveltest/vendor/autoload.php';//28行目
~~
$app = require_once __DIR__.'/../laraveltest/bootstrap/app.php';//38行目

⑨XAMPP環境下のphpMyAdminで同アプリ用に作ったテーブルをエクスポート(.sqlファイル)

⑩先ほどエクスポートしたsqlファイルをXserver環境下のphpMyAdminにインポートしてテーブル作成

⑪転送した.envを以下のように編集して保存

.env
APP_URL=http://独自ドメイン/

DB_connection=mysql
DB_HOST=自身のサーバ名.xserver.jp
DB_PORT=3306
DB_DATABASE=自身のデータベース名
DB_USERNAME=自身のユーザー名
DB_PASSWORD=自身で設定したパスワード

⑫対象のドメインへアクセスして問題ないか確認。

実際にデプロイしたサイトは以下になります。
よければ覗いてみてください◎
https://craftbeers.site

参考

参考にさせていただいた記事は以下です。
https://qiita.com/hitotch/items/5c8c2858c883e69cd507

最後に

完全に個人的備忘録です。
もしかしたらかなり遠回りな方法でデプロイしているかもしれませんので、
他にも良い方法がありましたら教えていただけますと幸いです。
また、初投稿で書き方もあまりわからなかったのでかなり雑な記事になってしまいました。。。
 

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

【Laravel】クエリビルダは言いました。「find()とfirst()は同時に使わないようにね。」

書籍の管理と貸し出し申請をウェブ上で行うことができるアプリケーション「BookMark」。読み終わった本を返却しようとしたその時、本は返却済み扱いにはならずエラー画面に遷移してしまいました。

バグの原因は返却対象の書籍情報を取得するクエリビルダにありました。今回はこのクエリビルダがどんなSQLを実行しているのか見てみたいと思います。

■結論

主キーで取得するならfind()を。
それ以外ならwhere()&first()を使おう。

■該当のソースコード

本の貸出状態は、booksテーブルの「user_id」カラムにユーザーIDがあるかないかで行っています。そのため、返却処理は「STEP1.リクエスト内の$bookIdからBookモデルを取得」「STEP2.user_idをnullで更新」で行っていました。

bookController.php
public function destroy(Request $request)
    {
        $user = Auth::user();
        $bookId = $request->application;
        // booksテーブルの所有者をnullで更新
        $book = Book::find($bookId)->first();
        $book->user_id = null;
        $book->save();
        //(以下略)

問題は$book = Book::find($bookId)->first();の部分。find()とfirst()を一つのクエリで行っています。

■tinkerでどうなっているのか確認

tinkerとは
tinkerとはLaravelでプログラムを対話的に扱える、ちょっとした動作確認に使える便利なシステムです。
引用:https://qiita.com/yu_eguchi/items/419a2a081ff142ecf67f

tinkerを起動して、書籍ID=2を取得してみます。

// tinker起動
bash-4.2# php artisan tinker
Psy Shell v0.9.12 (PHP 7.3.11 — cli) by Justin Hileman
// Bookモデルでid=2のレコードを取得
>>> use App\Book;
>>> Book::find(2);
=> App\Book {#3056
     id: 2,
     book_name: "JUnit実践入門",
     user_id: null,
     created_at: "2020-01-16 06:51:25",
     updated_at: "2020-02-02 13:45:07",
     title_kana: "ジェイユニット ジッセン ニュウモン",
     subtitle: "体系的に学ぶユニットテストの技法",
     subtitle_kana: "タイケイテキ ニ マナブ ユニット テスト ノ ギホウ",
     isbn: "9784774153773",
     author: "渡辺修司",
     author_kana: "ワタナベ,シュウジ",
     publisher: "技術評論社",
     url: "https://books.rakuten.co.jp/rb/12058050/",
   }

きちんとID=2が取得できています。
次は、これにfirst()をつけてみます。正常な動作であれば同じ結果になるはずです。

// これにfirst()をつけてみる。
>>> >>> Book::find(2)->first();
=> App\Book {#3047
     id: 1,
     book_name: "SOFT SKILLS",
     user_id: null,
     created_at: "2020-01-16 06:51:25",
     updated_at: "2020-02-02 13:45:23",
     title_kana: "ソフト スキルズ",
     subtitle: "ソフトウェア開発者の人生マニュアル",
     subtitle_kana: "ソフトウェア カイハツシャ ノ ジンセイ マニュアル",
     isbn: "9784822251550",
     author: "ジョン・Z.ソンメズ/長尾高弘",
     author_kana: "ソンメズ,ジョン・Z./ナガオ,タカヒロ",
     publisher: "日経BP社",
     url: "https://books.rakuten.co.jp/rb/14141677/",
   }

結果が変わりました。どうやら、おかしいのはこの部分のようです。

■実行クエリを確認

実際に実行されているクエリが見たいですね。そんなときは、enableQueryLog()getQueryLog() を使いましょう。

example.php
\DB::enableQueryLog();
// 見たいクエリ
dd(\DB::getQueryLog());

これで確認ができます。

bookController.php
public function destroy(Request $request)
    {
        $user = Auth::user();
        $bookId = $request->application;<img width="388" alt="dd_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250884/bfffecdf-e6e7-5063-a6ef-38777036f7d2.png">

        // 見たいクエリの前に記述。
        \DB::enableQueryLog();
        $book = Book::find($bookId)->first();
        // dd()で実行されたクエリを見る。
        dd(\DB::getQueryLog());
        $book->user_id = null;
        $book->save();
        //(以下略)

dd()の結果画面がこちら。
dd_1.png

原因が判明しましたね。
実行したいクエリselect * from books where books.id=1 limig 1;の後に、select * from books limit 1;が実行されていたため、想定の結果とは異なるデータになっていたようです。

では、$book = Book::find($bookId);のクエリはどうなるのでしょうか。
dd_2.png

まとめるとこのような実行内容になるようです。

query.php
// findでidを指定
Book::find(2);
 select * from books where id = 2 limit 1;

// whereでidを指定した後、first()で1レコード取得
Book::where('id', 2)->first();
 select * from books where id = 2 limit 1;

■まとめ:主キーならfind()。それ以外ならwhere()&first()。

今回のバグは、find()とwhere()&first()の理解不足だったため起きました。
find()で指定するのは主キーだからfirst()を使わなくても1レコードに特定することができるという点に気づけばこのような勘違いは起きなかったと思います。以後、気を付けます。

それでは!

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

Laravelの開発環境をDockerで構築したらcould not find driver

Laravelの開発環境をDockerで構築しようとしてハマったのでメモを残しておきます。

Laravelの開発環境をDockerで構築する方法は以下を参照してください。
Dockerを使って1コマンドで起動できるLaravel開発環境を構築する

以下のようにDockerfileを作成しました。

Dockerfile
FROM php:7.3-apache

COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get install -y \
    unzip \
    libzip-dev \
    zlib1g-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && a2enmod rewrite
COPY ./apache2.conf /etc/apache2/apache2.conf
COPY ./php.ini /usr/local/etc/php/php.ini

WORKDIR /var/www/myapp

コンテナを起動してアクセスしてみると、PDOExceptionでcould not find driverが出力されました。
MySQLのPDOドライバが有効になってなかったかと思って、php.iniのexentionのコメントを外すもエラー消えず。

そもそもインストールされてないっぽいです。
対処法はDocker Hub に答えがありました。

======Docker Hub引用=========
PHP Core Extensions
For example, if you want to have a PHP-FPM image with the gd extension, you can inherit the base image that you like, and write your own Dockerfile like this:

FROM php:7.4-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd

======Docker Hub引用=========

どうやらdocker-php-ext-installでいけるようです。

最終的にこんな形にして、エラーは解消しました。

FROM php:7.3-apache

COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get install -y \
    unzip \
    libzip-dev \
    zlib1g-dev \
    && docker-php-ext-install \
    zip \
    pdo_mysql \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && a2enmod rewrite
COPY ./apache2.conf /etc/apache2/apache2.conf
COPY ./php.ini /usr/local/etc/php/php.ini

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

Laravel+SendGrid WebAPIでメール送信

1.はじめに

LaravelでSendGrid Web APIを使ってメール送信する方法を記載していきます!
メール本文はbladeで書いて、様々なメールのテンプレートを利用できるようにします。

2.環境

  • Laravel Framework 6.0.4
  • "sendgrid/sendgrid": "^7.4"

3.SendGridのコンソールで、API Keyを発行

SendGridにログイン(アカウントがない場合は作成)し、
https://app.sendgrid.com/settings/api_keysにアクセスします。

[Create API Key]をクリックし、APIキーを作成しましょう。

※APIキーは一度しか表示されないので注意!

4.パッケージのインストール

laravel側で、SendGridのパッケージをインストールしましょう。

terminal
composer require sendgrid/sendgrid

5.envファイルにAPIキーとかを追記

APIキーや送信元アドレスなどを記載しておきます。

.env
#sendgrid 
SENDGRID_API_KEY="ここにAPIキーを記載する"
FROM_EMAIL="ここに送信元アドレス"
FROM_NAME="ここに送信元の名前"

6.処理を書く

controllerやmodelなどにメール送信のコードを書きます。
今回はシンプルにRequestのデータからユーザのデータを取得してメール送信する例です。

※下記ではメール送信に失敗した際の処理をLogとして残していますが、要らない場合は削除してください。

use Exception;
use Log;

~

public function sendMail(Request $request)
    { 
        $data = $request->all();

        $email = new \SendGrid\Mail\Mail();
        $email->setFrom(getenv('FROM_EMAIL'), getenv('FROM_NAME'));
        $email->setSubject("○○○○○○○○○○○○通知");
        $email->addTo('送信先アドレス');

        $sendGrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
        $email->addContent(
            "text/plain",
            strval(
                view(
                    'emails/templates/notificationMail',
                    compact('data')
                )
            )
        );
        $email->addContent(
            "text/html",
            strval(
                view(
                    'emails/templates/notificationMail',
                    compact('data')
                )
            )
        );
        try {
            $sendGrid->send($email);
            return true;
        } catch (Exception $e) {
            Log::debug($e->getMessage());
            return false;
        }
    }

7.メール本文をbladeで書く

6.のコードだと、「emails/templates/notificationMail.blade.php」をテンプレートとして指定しています。

viewをメールの体裁ごとに作成しておけば、便利だと思います。

通常のreturn viewと同様にcompactで渡したデータを好き放題表示しましょう!

notificationMail.blade.php
<div>
    <p>
        〇〇〇通知です<br>
        以下詳細をご確認ください
    </p>

    <div>
        <p>-------------------------------------------------------</p>
        <div>お名前{{ $data->name }}</div>
        <div>メッセージ{{ $data->message }}</div>
     <p>-------------------------------------------------------</p>
    </div>

</div>

8.宛先を複数人にしたいとき

宛先が複数人の場合は、「$email->addTo('送信先アドレス');」をforeach等で追加分実行すればできます。

同じアドレスが複数あるとBad Requestになってしまいメールが送れないので、配列にして重複を除いてから送信するとよいと思います!

example
$emails = array('test1@example.com', 'test2@example.com','test3@example.com');

$uniqueEmails = array_unique($emails);
$alignedUniqueEmails = array_values($uniqueEmails);

9.まとめ

あとは、メールを送信したいタイミングで関数を実行するだけです。
関数はどこかに汎用的に使えるようにしておくといいですね!

SendGrid社に感謝です。
アリガトウゴザイマス!

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