Laravelで困ったときは?

PHP関数が使えない!?

たとえば「DateTime()」などのPHPのオブジェクトを使った際に、
以下のようなエラーになる場合がある。

FatalErrorException in WeeklyReportController.php line 13:
Class 'App\Http\Controllers\DateTime' not found

これは、「App\Http\Controllers」の
名前空間内から関数を参照しようとしているためである。

以下のように、頭に「\」を加えて、
名前空間を出るように指定すれば、使えるようになる。

$date = new \DateTime();

もしくは、同じファイル内でuseするとよい。

use DateTime; // クラス外に記述する
$date = new DateTime();

「DateTime()」に限らず、newして失敗するようなら、
これらの方法で名前空間を抜け出すようにしてみるとよい。

CSRF対策は?

CSRFとは、「クロスサイトリクエストフォージェリ」の略で、
つまり、ログイン状態のユーザーに、攻撃用URLを踏ませて、データを書き換える行為。
「フォージェリ」とは「偽造」という意味であり、
要するに、偽造した認証情報で情報書き換えを行うようなもの。

Laravelにおいては、すべてのPOSTメソッド受信には、CSRF対策が施されている。
POSTメソッドの際に、同時にCSRF対策用トークンを挿入しなければ、
POSTメソッドを受け付けないようになっている。

やり方は、ビューのformタグの中に、以下のコードを埋め込めばよい。

{{ csrf_field() }}

これで非表示状態のinput要素として、トークンが挿入される。
これがなければ、POSTメソッドで次のページに遷移する事ができない。

逆に、外部からのPOSTメソッドを許可したい場合もあるかもしれず、
また、Laravelにおいても、CSRF対策を無効化する方法も存在する。
しかし、そういうものはうかつに無効化するよりも、
Laravelの外で別途部品を作り、別のデータベーステーブルを作って管理するなどの
設計・配慮をしたほうが、安全であると思われる。