20200228のlaravelに関する記事は5件です。

【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エンティティ化した場合
→下のような感じでタグも単なる文字列を変換してくれる。

&lt;a href=&quot;#&quot;&gt;Qiita&lt;/a&gt;

HTMLエンティティ化していない場合
→モロ出しなので悪意のあるスクリプトが仕込まれる可能性がある。

<a href=‘#’>Qiita</a>

さいごに

次回、strip_tagsを使ってタグを除去する方法も調べてみる。

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

Laravelでrequest->input()を使う時

Requestからデータを得る時

// 推奨
$data = $request->input('data');

// 非推奨
$data = $request->input();
if($data['data']){
  // code...
}

request->input()ドキュメント)を用いる際、上の記述のやり方を用いると良い。
理由は、input()の引数を指定してあげることで、値が代入されていない場合、nullが返されるから。
下の記述だと、dataの値がnullだった場合、undefined variableとなってしまう!

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

Laravelの外部キー制約でハマった話

はじめに

  1. Laravel初心者につき、お手柔らかに。
  2. 自分がハマってしまったので備忘録として。
  3. 「間違ってる!」、「○○したほうが良い!」みたいなことは教えてください。

ハマったこと

マイグレーションファイルを作成中のこと。外部制約キーを記述し、いざ$ php artisan migrateをすると、SQLSTATE[HY000]: General errorのエラーが。
参照元のテーブルや型の部分で間違いがあるのかと思い何度も確認したが間違いはなさそう。

原因

結論から述べると、マイグレーションファイルの順番(作成の順番)がまずかったようです。
最初のマイグレーションファイルがこれ↓
スクリーンショット 2020-02-28 17.12.51.png

issuesからcategoriesを参照したかったのにこの順番になっていたので、マイグレーションの際にエラーが出ていたようです。

コマンドから生成されるマイグレーションファイルはYYYY_MM_DD_hhmiss_create_テーブル名s_table.phpのような名前になっているので頭の日付の部分をいじって順番を変えて上げると解決します。こんな感じ↓
スクリーンショット 2020-02-28 17.12.28.png

前述したように、issuesからcategoriesを参照したいので、先にcategoriesをもってきます。
そうして$ php artisan migrate:refreshをするとうまくいきました。

まとめ

とても初歩的なところだと思いますが、Laravel初心者の僕は引っかかってしまったので参考までに。
アドバイス・ご指摘など有りましたらよろしくおねがいします!

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

laravel Controller作成時 ReflectionException

App\Http\Controllers\〇〇がある場合

# php artisan make:controller 〇〇/<Controller名>

このようにコントローラを作成してあげると、App\Http\Controllers配下のディレクトリにコントローラが作成され、名前空間(namespace)も自動的に記述される。

作成直後にReflectionExceptionが出る場合

App\Http\Controllers\〇〇.php
use App\Models\<モデルクラス>;
use App\Http\Controllers\Controller;

この2つをuseすることが最低限必要そうです。
どちらかが記述されていないと、php artisan route:listなどが機能しません。

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

【Laravel6系】php artisan make:authが使えない問題の対処法

はじめに

Laravelの6系から php artisan maek:auth コマンドを使用すると下記画像のメッセージが出てしまいます。
スクリーンショット 2020-02-28 0.20.09.png

こちらの記事を見て環境構築をする度に出会して、その度々で解決方法を調べていたのでそろそろ言語化して記憶の片隅に残しておきます。

開発環境

言語・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デフォルトの認証機能を使うことができるようになりました。
スクリーンショット 2020-02-28 0.46.22.png

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