QiitaQiitaの最新情報を7時、12時、19時にTwitterでお届けします。laravelPythonJavaScriptRailsRubyAWSPHPdockerJavavue.jsSwiftAndroidiOSC#UnityLinuxNode.jslaravelGoCSSGitHTMLReactMacMySQLC++TensorFlowDeepLearningKotlinSQL新人プログラマ応援202001222020/02/282020/02/272020/02/262020/02/252020/02/242020/02/232020/02/222020/02/212020/02/202020/02/1920200122のlaravelに関する記事は10件です。6.5.0MariaDBやりたいことMariaDBのに下記のようなデータが格納されていてそれをLaravelのAPIで取得する。bold</style>TweetQiitaで続きを読む投稿日:2020-01-22T19:20:03+09:00AWSで作ったLaravelアプリケーションをXserverにデプロイするはじめにタイトル通りですが、LaravelアプリケーションのデプロイをXserverで試してみました。AWSでアプリケーションは作成したのですが、XAMPPで作成した方も以下のやり方でできると思います。まとめさっそくですがやり方を以下にまとめました。※XAMPPでアプリケーションを作成した方は6以降を参考にしていただければと思います。1AWSでLaravelアプリケーションを作成。2作成したアプリケーションのフォルダをダウンロードしてXAMPP環境下(htdocs内)に保存する。3XAMPPでphpMyAdminを起動。アプリケーション用のDB(DB名:laravel)を作成する。4.envをXAMPP環境下でDBが使えるようにに編集。migrate//このコマンドでテーブルが作成されます。6FTP(FileZillaを使用しました)で転送したいドメイン内のpublic_htmlへ作成したアプリのpublic内のファイルをすべて転送7publicフォルダ以外のファイルをまとめて新しく作ったフォルダに転送(public_htmlと同じ階層下)フォルダ名はlaraveltestとしました。__DIR__.'/../laraveltest/bootstrap/app.php';//38行目9XAMPP環境下のphpMyAdminで同アプリ用に作ったテーブルをエクスポート(.sqlファイル)10先ほどエクスポートしたsqlファイルをXserver環境下のphpMyAdminにインポートしてテーブル作成11転送した.envを以下のように編集して保存.envAPP_URL=http://独自ドメイン/DB_connection=mysqlDB_HOST=自身のサーバ名.xserver.jpDB_PORT=3306DB_DATABASE=自身のデータベース名DB_USERNAME=自身のユーザー名DB_PASSWORD=自身で設定したパスワード12対象のドメインへアクセスして問題ないか確認。参考にさせていただいた記事は以下です。https://qiita.com/hitotch/items/5c8c2858c883e69cd507最後に完全に個人的備忘録です。他にも良い方法がありましたら教えていただけますと幸いです。初投稿で書き方もあまりわからなかったのでかなり雑な記事になってしまいました。TweetQiitaで続きを読む投稿日:2020-01-22T17:32:35+09:00Laravel:ブラウザ上の大量のinput要素に自動的に動作確認用のダミーデータを挿入する方法はじめにLaravelに限らず開発をする際において、ブラウザ上で動作確認のテストをすることは重要だと思います。(テストコードを書けという意見もありますが、初心者のうちはテストコードなんて書くのが難しかったりしますので、そこは多めにみてください...)ブラウザ上で動作確認のテストをする際、大量のinput要素に一個一個手打ちでデータを入れていくのはとても手間がかかり、面倒な作業です。それが100個のinput要素だったりした時には面倒で面倒で仕方ないと思います。そこで、特定のURLにアクセスすると自動的に動作確認用のダミーデータを挿入する方法を書いていこうと思います。今回はサンプルなので実際に使う際は自分なりに変えて使ってみてください。下記のように、こんなマイグレーションファイルがあったとします。}}contentを今回は10個用意しました。次はbladeですが、このように記述します。</form>@endsection続いて、web.phpも書いていきます。'PostsController@store');2行目に書いてある/posts/create/{type?}が今回重要になってきます。{type?}はLaravelの任意パラメータというものになります。詳しくはドキュメントを参考にしてください。このように記述し、アプリ名/posts/createにアクセスすると、下のようなフォームができていると思います。フォームができていることを確認したら次はコントローラーを記述していきます。今回はサンプルで作ったのでバリデーションなどは書いていません。自分のサービスに合わせてバリデーションを書いてください。}}ここで重要になるのはcreateメソッドです。}ダミーデータをconfigから呼んでいます。そのダミーデータをconfigディレクトリにファイルを作成して、記述しましょう。この時に使うファイル名は上で書いたform_dummy_data.phpとします。]];trueとfalseで分けているのは、コメントの通り、バリデーションを通すデータと通さないデータに分けているからです。これでいったん完成なのですが、それでは今度は、アプリ名/posts/create/post_create_trueか、アプリ名/posts/create/post_create_falseにアクセスしてみてください。フォームに自動的にデータが挿入された状態になっていると思います。最後にブラウザ上で大量のinput要素に自動的にダミーデータを挿入する方法を書きました。本来ならテストコードを書くべきなのですが、冒頭にも述べた通り、初心者には難しかったり、テストを書く時間がない場合など様々な場面で使えると思います。ダミーデータも自分のサービスに合わせて作り変えたりして活用してみてください。Laravel始める前にdockerを使用してx-debugを設定するさまざまな方法に関するチュートリアルがたくさんあります。一部は時代遅れで、一部は他のテクニックを使用します。Stormを構成するPHP設定内で、プロパティを次のように設定します。cornerサーバーリストから[...]ボタンをクリックして、新しいサーバーを作成します。applicationディレクトリ)にマップします。directory.これにより、PHPStormで受信したリクエストをデバッグできます。PHPStorm.TweetQiitaで続きを読む投稿日:2020-01-22T16:09:09+09:00Laravelの認証処理に独自の制約を追加するログインするときにパスワードによる認証だけでなく、独自の制約を追加したい場合があると思います。ユーザが仮登録ではない場合(本登録)のみログインとか、ある権限を有する場合のみログインなどです。ある話なので実装も何回か経験していますが、毎回調べながらなので今回記事としてまとめてみました。いってもLaravelのバージョンによって認証周りは結構違うんですよね。6.12.0です(もう12!!)。単純にデフォルトの認証ならば、メールアドレスとパスワードのみでログイン出来ます。0ならばログインという仕様とします。すれば認証処理で新たな制約を加えることが出来るのか。認証のテストまずはテストを書いてみます。1のユーザが、認証不可で/loginにリダイレクトされなければいけないところを、正常にログインして/homeにリダイレクトされています。このテストが成功するように修正していきます。認証処理のソースコードを追うログインのソースコードを追ってみましょう。}}ログインのコントローラではAuthenticatesUsersトレイトが使われていますね。}}login()メソッドの中でattemptLogin()メソッド、Auth::guard()のattempt()が呼ばれています。attempt()を調べたらvendor/laravel/framework/src/Illuminate/Auth/SessionGuard.phpに行き着きました。省略}retrieveByCredentials()で認証情報からユーザを取得しています。次に出てくるのが、Eloquentを使っているならvendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.phpです。省略}よく知られているように?、Laravelの認証では、まずパスワード以外の情報でユーザを取得してきてから、パスワードをチェックします。0の条件を渡せればいいわけです。遡って$credentialsはどう取得されるかというと、AuthenticatesUsersトレイトのcredentials()メソッドで取得されています。}username()で定義された項目(デフォルトではメールアドレス)とパスワードしか返さない実装となっています。assertions)成功しましたまとめ今回はapp/Http/Controllers/Auth/LoginController.phpの修正だけで出来ました。公式ドキュメントにはガードとプロバイダを使った独自の認証について書かれていますが、難しい。今回みたいな小手先の修正となってしまいます。シンプルな仕様ならLaravelは超簡単ですが、複雑なシステムを作ろうとすると奥が深いですね。バリデーションの機能がある。validateの後ろにオリジナルの名前。この名前がバリデーションの名前になる。下記のメソッドは、半角英数字とスペースを許可するってこと。}3フォーム単位?で使いたい。クラスを生成して、割り当てていく。}}4バリデーションエラーの時のメッセージを多言語化バリデーションのエラーメッセージを多言語化できる。実装手順SendGridでの設定は省略します。処理を分けるテンプレートを用意する。sendgrid/sendgridgithubのサンプルコードで仮実装とりあえず、サンプルコードを動かしてみます。必要なものをuseして、適当なメソッドに貼り付けます。ルーティングの設定を忘れずに。}}送信が完了したら、202から始まるテキストが表示されます。処理を分けるSendGrid以外のサービスを利用することになった場合でも、少ない修正で済むようにする!ということまではしていません。SendGrid(env('SENDGRID_API_KEY'));の部分をDIできるように、バインディングします。以下のように登録することで、引数にトークンが渡された状態でDIされます。<-この記述がいらなくなる。}次に、メール構築部分の処理を分離していきます。app/Mail/TestMail.phpを作成し、そのコンストラクターでメールを構築するようにします。'メールを送信しました。'メール送信に失敗しました。ついでに修正}テンプレートを用意する。次にBladeテンプレートを用意して、それを利用するようにします。(以下は、プレーンテキスト用のテンプレートです。テンプレートを利用するには、viewインスタンスを文字列にキャストしたものを、addContentに渡せばOKです。}}複数のメールアドレスに対して送信する場合は、addTosメソッドを利用すればいいようです。User3"];$email->addTos($tos);この場合、toに複数のアドレスを書き込んでいる状態なので、受信者は全てのメールアドレスを見れてしまいますので、気をつけてください。マーケティングメールなどを送るときは、メールアドレス分ループさせるのが良さそうです。APIを利用してメールを送信する実装手順SendGridでの設定は省略します。処理を分けるテンプレートを用意する。sendgrid/sendgridgithubのサンプルコードで仮実装とりあえず、サンプルコードを動かしてみます。必要なものをuseして、適当なメソッドに貼り付けます。ルーティングの設定を忘れずに。}}送信が完了したら、202から始まるテキストが表示されます。処理を分けるSendGrid以外のサービスを利用することになった場合でも、少ない修正で済むようにする!ということまではしていません。SendGrid(env('SENDGRID_API_KEY'));の部分をDIできるように、バインディングします。以下のように登録することで、引数にトークンが渡された状態でDIされます。<-この記述がいらなくなる。}次に、メール構築部分の処理を分離していきます。app/Mail/TestMail.phpを作成し、そのコンストラクターでメールを構築するようにします。'メールを送信しました。'メール送信に失敗しました。ついでに修正}テンプレートを用意する。次にBladeテンプレートを用意して、それを利用するようにします。(以下は、プレーンテキスト用のテンプレートです。テンプレートを利用するには、viewインスタンスを文字列にキャストしたものを、addContentに渡せばOKです。}}複数のメールアドレスに対して送信する場合は、addTosメソッドを利用すればいいようで。User3"];$email->addTos($tos);以上です。参考https://github.com/sendgrid/sendgrid-php#usageTweetQiitaで続きを読む投稿日:2020-01-22T01:37:16+09:00LaravelでCSVダウンロード機能を実装する。CSVダウンロード機能を実装するにあたり、少しはまった部分があったので備忘録です。一時的にCSVファイルを作成CSVファイルに書き込みダウンロードレスポンスを返す。値をクオートで囲むことで1つの値として評価される。改行コードをダブルコートで囲むことで改行コードとして評価される。SJISにエンコーディングする。Exception("ディレクトリを作成できませんでした。Exception("ファイルの書き込みに失敗しました。$name)->deleteFileAfterSend(true);}参考https://gray-code.com/php/download-for-csv-file/https://teratail.com/questions/2199https://bayashita.com/p/entry/show/49https://qiita.com/ikemonn/items/f2bc4f9f834c989084ffhttps://www.megasoft.co.jp/support/mifes/faq/miw8faq/faq017.htmlTweetQiitaで続きを読む投稿日:2020-01-22T00:57:36+09:00システムからメール送信するときのメール配信サービスを列挙システムからメール送信をするため、メール配信サービスを調査したので列挙します。他のサービスを検討することとなりました。AWSのSESでバウンスメール(bouncemail)対策。SESでバウンスメールをハンドリングしてみたちなみにLaravelドキュメントで触れられているサービスは、バージョンによって地味に変わっています。5.7MailgunとSparkPostなどAPIベースドライバはシンプルでSMTPサーバよりも高速です。5.8MailgunとSparkPost、Postmarkなど、APIベースドライバはシンプルでSMTPサーバよりも高速です。6.xMailgunとPostmarkなど、APIベースドライバはシンプルでSMTPサーバよりも高速です。SESの4倍くらい高価Postmarkこのサービスは、トランザクションメールにのみ利用できるというポリシーのようで、今回のメール配信内容としてはマーケティングメールに当たるため、却下トランザクションメールとマーケティングメールの違いとは?SendGrid今回はSendGridで要望を満たせたため、こちらを採用しました。