LaravelでGET,POSTにパラメーターを追加して、渡す方法・受け取る方法

Webアプリケーションでのデータの受け渡しで使われる、GET・POSTです。
普通に使う場合の説明は、色々と紹介されていると思います。

今回は、パラメータを追加した場合の方法に絞って説明していきます。

GETにパラメーターを追加した場合

まずは、GETにパラメータを追加した場合です。
GETの特徴としては、URLに情報を渡してデータのやりとりをする部分です。

重要情報を明記するのはNG行為ですね。
使われ方としては、ページ別 id とかで出し分けるときに使います。

Route・Controllerで必要な処理を明記していきます。

■Route

Route::get('URL/{parameter}','Controller@method');

メソッドはgetです。
重要な部分は、{parameter}です。
ここに引き渡したいパラメータをセットされるようにします。

■Controller

controllerでデータを受け取る場合は単純です。

public function method($parameter)    {
// $parameter を使える。
}

メソッドの引数に変数を入れてあげればOKです。
(引数の名称はなんでもOK!なはずです。)

POSTにパラメーターを追加した場合

POSTでサーバにデータを送信する際は、HTTPリクエストボディにデータが記述されるので、比較的安全にデータを渡すことができます。
フロント側から、サーバー側へデータを渡すことができます。

HTMLのformからPOSTを送信する場合は、パラメータをactionの中に組み込みます。

  <form method="POST" 
        action="{{ route('route_nama', ['key' => $parameter]) }}"> 
 </form> 

controllerで受け取る場合には、

public function method(Request $request)    
{     
// $request->key でpameterの内容を受け取ることができる。

}

$requestの中にデータが入っています。
引き出す際には、送信する際に設定した、keyを変数名にして
$request->key を指定することで受け取ることができます。

Laravelのメール配信機能をyahoo Mailを使って送信する方法

LaravelでWebサービスを作っています。
仮登録で、メールに誘導してから本登録をする導線を作ろうとして大分てこずりました。

一連の流れは、Quitaでの投稿を参考にさせて頂いております。
※ 幾つか修正をしつつ参考にさせて頂いております。
https://qiita.com/nitaking/items/588a645968efcac6d37a

今回紹介するのは、メール送信システムとしてYahooメールを使う方法です。
(記事通りに、 mailtrap を活用する方には不要な内容です。)

ざっくりとした流れは、下記です。

1:Yahooアドレスを用意
2:Yahooでの設定を有効にする。※Yahooダイレクトオファーへの登録も必要
3:Laravelで.env に情報を反映
4:Laravelで config/mail.phpの情報を変更
5:必要に応じて、キャッシュ情報のclear

[追記]6:Yahooに制限をかけてブロックされました。

1:Yahooアドレスを用意

これは言わずもがなですね。準備してください。
重要なことは、 メール送信設定をする際に、パスワードの登録が必要なのでパスワードを発行してください。
最近は仕様が変更したのか、SMSでの番号認証で、パスワードでの登録を省いてる仕様でした。なので、アカウントを作成した後に、パスワードの作成をして下さい。(謎の二度手間ですね。)

パスワードの作成方法は、
登録情報 > ログインとセキュリティ > パスワードの変更

https://accounts.yahoo.co.jp/profile?.src=ym&.done=https://mail.yahoo.co.jp/&current=security

2:Yahooでの設定を有効にする。※Yahooダイレクトオファーへの登録も必要

外部のシステム(今回は、Laravel)を利用してYahooメールシステムから、メール送信する場合には幾つかの設定を完了しておく必要があります。

「IMAP」「POP」「SMTP」をそれぞれ「有効にする」を選択します。

Yahoo公式サイトに掲載されている情報に従って、メール設定から 「IMAP」「POP」「SMTP」が有効になっているのかを確認してください。有効でない場合には、変更をして下さい。

https://knowledge.support.yahoo-net.jp/PccMail/s/article/H000007321

Yahoo!ダイレクトオファーの登録

これ必要性は若干謎だと思っているのですが、Yahoo!ダイレクトオファーの登録が必要なようです。

Yahoo!ダイレクトオファーは、Yahoo! JAPANまたは提携先企業から、新商品、各種セール、お買い得情報などをお知らせするサービスです。

https://support.yahoo-net.jp/PccDirect/s/article/H000011064

必要とのことなので、登録しておきましょう。
設定変更は、下記からいけます。

https://direct.yahoo.co.jp/config/deliver?.src=help

3:Laravelで.env に情報を反映

Laravelに移って、.envの設定をしていきましょう。
ここでの設定が、理解が足らずエラーに苦しみました。
.envで設定されるべき内容が何かを正しく理解して、今回使うYahooのシステムを利用するためには、何が必要なのかを判断しましょう。という話です。

Yahooが指定している情報を参考にしてください。

https://knowledge.support.yahoo-net.jp/PccMail/s/article/H000011473

送信の際に気を付けるべき項目は下記です。

送信メールの通信方式    SSL
送信メール(SMTP)サーバー    smtp.mail.yahoo.co.jp
SMTPサーバのポート番号    465

このyahooのルールを参考に
.envで設定されるべき項目は下記です。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mail.yahoo.co.jp
MAIL_PORT= 465
MAIL_USERNAME=<Yahooのユーザー名>
MAIL_PASSWORD=<Yahooのパスワード>
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=<Yahooのユーザー名>@yahoo.co.jp
MAIL_FROM_NAME=<好きなNameを設定>

4:Laravelで config/mail.phpの情報を変更

.env に情報を反映でOKかなと思っていましたが
下記、エラー分が発生しました。

Connection to tcp://smtp.mail.yahoo.com:465 Timed Out

色々と調べていくと、下記にたどり着きました。

https://stackoverflow.com/questions/38341424/connection-to-tcp-smtp-mail-yahoo-com465-timed-out/38361849

どうやら、config/mail.phpの設定を一部変更する必要があるとか。
(この設定をして、エラーが消えましたが、もしかすると .envでMAIL_ENCRYPTION=sslを設定するだけでOKかもしれないです。)

5:必要に応じて、キャッシュ情報のclear

.envの情報を変更するとすぐに情報が反映されずに、データがキャッシュに残ってしまう場合があります。その際には、キャッシュをクリアしてあげましょう。

ターミナル(コマンドプロンプト)にて、下記を実行してあげてください。

php artisan cache:clear 
php artisan config:clear 

[追記]6:Yahooに制限をかけてブロックされました。

上記のように、Yahooで登録して5件ほどメールの送信をしていたところ、下記エラーがでました。

 Expected response code 250 but got code "521", with message "521 smtp.mail.yahoo.co.jp closing transmission channel. User is over the limit for messages allowed to be sent in a single day.  " 

色々と調べていくと、Yahoo側で制限をかけているようです。

これは、Yahooのアドレスを使って送信をするのは得策ではないかもしれないですね…

Laravelで「Illuminate\XXXX」はどこにあるのか。

Laravelで開発を始めたばかりです。
フレームワークあるあるですが、様々な場所からクラスを継承してきて、何処に何があるのかが慣れるまで分かりづらいです。

Illuminate はどこにあるのかを解説していきます。

use Illuminate \ XXXX
は、よく使うと思いますが、
一番上のフォルダ階層に Illuminate というフォルダはありません。
どこにあるのでしょうか。

vendor\laravel\framework\src\illuminate

↑ ここに、あります。

Laravelでphp artisan migrateをするとエラー:「 [1044]Access denied for user」を解決した

MySQLとの接続において、Access deniedされたのを解決した方法です。
自分の場合は、普通に何度もphp artisan migrate(MySQLとの接続)を実行していて急に接続出来なくなったシチュエーションです。

調べていくと、下記のサイトが有力情報としてあがってきました。

https://qiita.com/terry_6518/items/13f5fbf4e5f58577d6d9

.env ファイルで、MySQLとの接続情報を所持しており、そこの情報が違うのではないか??という情報がチラホラ。

.envファイルを確認しても、
接続出来ていた状態と何も変わらない….

ということは、MySQL側で何か変化が起きている可能性がありそう。
ということで確認してみると。

接続可能なユーザー情報を確認しようと、MySQLの特権にアクセスすると、エラーが…..

全く同じエラーで困っている人の情報を参考に、このエラーを解決しました。

https://tt-computing.com/mariadb-error-176

すると、もともと接続するために作っていた
DB_USERNAMEが消えているではないですか。

特権から、ユーザアカウントを追加する、で新しく追加しました。

.envの

DB_DATABASE=XXXX
DB_USERNAME=XXXX 
DB_PASSWORD=XXXX

にセットすることで解決できました…!

LaravelでAuth::routes()の処理はどこに記述されているのか。

routeを確認してみましょう。
routes/web.php

Auth::routes();
と記載されています。
こちらを参照して、route設定が行われております。

このrouteの中身は下記に記載されています。
laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php

で、下記の記述を見ると
RegisterControllerにメソッドを指定しているように書かれています。
    $this->get(‘register’, ‘Auth\RegisterController@showRegistrationForm’)->name(‘register’);
    $this->post(‘register’, ‘Auth\RegisterController@register’);

しかし、
RegisterControllerの中にメソッドが記載されていません。

register・showRegistrationFormなどのメソッドはどこから呼び出されているかというと
下記です。

use Illuminate\Foundation\Auth\RegistersUsers;

laravelでデータ取得時にNULLかどうかを判別する方法

laravelでMySQLとデータ通信をしていることを前提とします。

クエリビルダーを活用して、laravelからデータを抽出した際に、NULLのときと、データがある場合でviewの表示方法を変える方法です。

controllerから  compact(‘Answer’) というカタチで、
データベースの返り値をAnswer変数にて渡します。

viewでの書き方は

@if ($questions->first() === NULL ) 
  AAA
@else
  BBB
@endif

Laravelでデータベースから取得したデータをviewで表示するとエラーが生じる

データベースから取得した結果を、

viewで、{{}} 内でそのまんま表示した際に

htmlspecialchars() expects parameter 1 to be string, array given

というエラーが生じた。

{{}}  の中には、stringを含めなさい。とのこと。

あれ??データベースから取得した結果は、stringではないのか??ということで混乱していました。

データベースから取得する際には、
DBファサード でget()メソッドを使ってデータ取得をしました。

調べた結果、
Illuminate\Support\Collection というデータ型でデータが返って来るとのことでした。( stdClassオブジェクト を含んでいる)そして、これはこのまんまでは、stringではないのです。
これを展開してあげる必要があります。

https://readouble.com/laravel/5.7/ja/queries.html

この、Collection型を展開するには、目的によっていろいろなメソッドが用意されているので、ご確認ください。

laravel 6.xでユーザーログイン・新規登録を一瞬で作成する方法

phpのフレームワークといえば、laravelですね。
フレームワークは簡単に機能が追加していける一方で、処理を理解するのが少し大変だと思います。

今回は、Webサービスを使う上で、使用頻度の高いユーザーログイン・新規登録を簡単に追加する実装方法を紹介します。

 ターミナル(コマンドプロンプト)で下記を実装してあげてください。

composer require laravel/ui "^1.0" --dev 
php artisan ui vue --auth

https://readouble.com/laravel/6.x/ja/authentication.html

ただし、これを実装するためには、composerという管理ツールをインストール&設定しておく必要があります。お気を付けください。

windows コマンドプロンプトで起動したローカルサーバーを停止する方法

macからwindowsに移行した際に、操作の違いに戸惑うことがあると思います。
今回は、windowsのコマンドプロンプトについて紹介します。

コマンドプロンプトで、ローカルサーバーを起動したはいいものの、停止する方法が分からずに、いました。
(コマンドプロンプトをいちいち削除して、消したりしていましたがめちゃくちゃ面倒くさい。)

調べたら出てきました。

-k stop
HTTP Serverを停止します。-n "サービス名"が指定されている場合は,該当するサービスを停止します。

ただ、-k stopしようとしましたが、そもそも打ち込めない感じなんですけど…???

そこで、さらに調べると

「Ctrl」キー+「C」キーで処理をコマンドの実行をキャンセルすることができる。

これで、サーバー停止をすることが出来ました。

「さくらサーバー」5mb以上のファイルをアップロードされる場合は、ファイル転送ソフトをご利用ください。

さくらサーバーを使っています。
さくらサーバーコントロールパネルからファイルマネージャーを使ってアップロードしていたら、アップロードファイル容量上限があることが分かりました。

5MB以上のファイルアップロードは出来ないようです。

5MB以上のファイルをアップロードする際は、FTPツールを使用してください、とのことらしいです。
FTPツールはなんでもOKだと思いますが
さくらサーバーの公式ドキュメントでは「 FFFTP 」を用いた、設定方法を教えてくれています。

https://help.sakura.ad.jp/206207161/#ac01