- 投稿日:2020-02-28T23:46:59+09:00
【Laravel】Bladeテンプレートの{!! !!}とは結局何なのか
はじめに
htmlタグ入りの変数を挿入する時、いつものように{{ }}で囲っていたらレビューで指摘されたので調べました。
{{!! !!}とは
公式ドキュメントを見てみる。
デフォルトでブレードの{{ }}文はXSS攻撃を防ぐために、PHPのhtmlspecialchars関数を自動的に通されます。しかしデータをエスケープしたくない場合は、以下の構文を使ってください。
うーん、htmlspecialchars関数のところがよく分からない。
htmlspecialchars関数とは
マニュアルを見てみる。
特殊文字を HTML エンティティに変換する。
htmlspecialchars関数を使ってHTMLエンティティ化すると、 htmlタグがそのまま文字列として表示さるみたい。
例えばこんな感じ。echo htmlspecialchars(‘<a href=‘#’>Qiita</a>’); // <a href=‘#’>Qiita</a> echo ‘<a href=‘#’>Qiita</a> // QiitaなぜXSS攻撃が防げるのか
HTMLエンティティ化した場合
→下のような感じでタグも単なる文字列を変換してくれる。<a href="#">Qiita</a>HTMLエンティティ化していない場合
→モロ出しなので悪意のあるスクリプトが仕込まれる可能性がある。<a href=‘#’>Qiita</a>さいごに
次回、strip_tagsを使ってタグを除去する方法も調べてみる。
- 投稿日:2020-02-28T17:42:21+09:00
Laravelでrequest->input()を使う時
Requestからデータを得る時
// 推奨 $data = $request->input('data'); // 非推奨 $data = $request->input(); if($data['data']){ // code... }
request->input()
(ドキュメント)を用いる際、上の記述のやり方を用いると良い。
理由は、input()の引数を指定してあげることで、値が代入されていない場合、nullが返されるから。
下の記述だと、dataの値がnullだった場合、undefined variable
となってしまう!
- 投稿日:2020-02-28T17:27:25+09:00
Laravelの外部キー制約でハマった話
はじめに
- Laravel初心者につき、お手柔らかに。
- 自分がハマってしまったので備忘録として。
- 「間違ってる!」、「○○したほうが良い!」みたいなことは教えてください。
ハマったこと
マイグレーションファイルを作成中のこと。外部制約キーを記述し、いざ
$ php artisan migrate
をすると、SQLSTATE[HY000]: General errorのエラーが。
参照元のテーブルや型の部分で間違いがあるのかと思い何度も確認したが間違いはなさそう。原因
結論から述べると、マイグレーションファイルの順番(作成の順番)がまずかったようです。
最初のマイグレーションファイルがこれ↓
issues
からcategories
を参照したかったのにこの順番になっていたので、マイグレーションの際にエラーが出ていたようです。コマンドから生成されるマイグレーションファイルは
YYYY_MM_DD_hhmiss_create_テーブル名s_table.php
のような名前になっているので頭の日付の部分をいじって順番を変えて上げると解決します。こんな感じ↓
前述したように、
issues
からcategories
を参照したいので、先にcategoriesをもってきます。
そうして$ php artisan migrate:refresh
をするとうまくいきました。まとめ
とても初歩的なところだと思いますが、Laravel初心者の僕は引っかかってしまったので参考までに。
アドバイス・ご指摘など有りましたらよろしくおねがいします!
- 投稿日:2020-02-28T14:38:39+09:00
laravel Controller作成時 ReflectionException
App\Http\Controllers\〇〇がある場合
# php artisan make:controller 〇〇/<Controller名>このようにコントローラを作成してあげると、
App\Http\Controllers
配下のディレクトリにコントローラが作成され、名前空間(namespace)も自動的に記述される。作成直後に
ReflectionException
が出る場合App\Http\Controllers\〇〇.phpuse App\Models\<モデルクラス>; use App\Http\Controllers\Controller;この2つをuseすることが最低限必要そうです。
どちらかが記述されていないと、php artisan route:list
などが機能しません。
- 投稿日:2020-02-28T00:46:56+09:00
【Laravel6系】php artisan make:authが使えない問題の対処法
はじめに
Laravelの6系から
php artisan maek:auth
コマンドを使用すると下記画像のメッセージが出てしまいます。
こちらの記事を見て環境構築をする度に出会して、その度々で解決方法を調べていたのでそろそろ言語化して記憶の片隅に残しておきます。
開発環境
言語・FW バージョン Laravel 6.14.0 PHP 7.2.26 何が変わったのか
Laravel6系から認証機能(Laravel/ui)が別パッケージとして管理されるようになりました。そのためまずはcomposerでパッケージをインストールしましょう。
composerでlaravel/uiのインストール
~/workspace/sampleProject/src/ $ composer require laravel/ui Using version ^1.2 for laravel/ui ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing laravel/ui (v1.2.0): Loading from cache Writing lock file Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: laravel/ui Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully.php artisanコマンドの実行
今回こちらの記事でDocker環境でLaravelの開発構築を行ったので、コンテナ内で
php artisan
コマンドを実行します。~/worksoace/sampleProject $ docker-compose exec php bash // 下記からphpコンテナ内 root:/var/www/# php artisan ui vue --auth Vue scaffolding installed successfully. Please run "npm install && npm run dev" to compile your fresh scaffolding. The [auth/login.blade.php] view already exists. Do you want to replace it? (yes/no) [no]: > yes The [auth/passwords/confirm.blade.php] view already exists. Do you want to replace it? (yes/no) [no]: > yes The [auth/passwords/email.blade.php] view already exists. Do you want to replace it? (yes/no) [no]: > yes The [auth/passwords/reset.blade.php] view already exists. Do you want to replace it? (yes/no) [no]: > yes The [auth/register.blade.php] view already exists. Do you want to replace it? (yes/no) [no]: > yes The [auth/verify.blade.php] view already exists. Do you want to replace it? (yes/no) [no]: > yes The [home.blade.php] view already exists. Do you want to replace it? (yes/no) [no]: > yes The [layouts/app.blade.php] view already exists. Do you want to replace it? (yes/no) [no]: > yes Authentication scaffolding generated successfully.まとめ
これで下記ルーティングの通りLaravel6系でもLaravelデフォルトの認証機能を使うことができるようになりました。