Laravel5.6 エラー "The page has expired due to inactivity. Please refresh and try again." と出た時の対処法
環境 Laravel5.6
下記のメッセージとともに何も動かなくなってしまうエラーに遭遇しました。
このエラー、ログにも原因が表示されず解決策が分かりませんでした。 ググったらすぐに解消したのですが、焦りました。
エラー内容
The page has expired due to inactivity.
Please refresh and try again.
こんな画面
原因
- postで送信した際に、formにcsrfを設定していなかったことが原因
解決策
- formにcsrfを設定する。
下記のbladeに、@csrfを書き加える
<form action="/test" method="post"> <input type="text" name="name"> <input type="submit" value="送信"> </form>
↓↓↓
<form action="/test" method="post"> @csrf <input type="text" name="name"> <input type="submit" value="送信"> </form>
これにて解消。
参考ページ
Laravelの日本語公式ドキュメントの閲覧バージョンを指定すると、 該当バージョンへ自動遷移してくれるアプリを作成したので、ぜひご活用ください。
Laravel CRUD作成でよく使うコマンド
LaravelのCRUD処理を作成する際によく使うコマンド一覧を作成しました
migration作成
$php artisan make:migration テーブル名
migrate実行
// マイグレーションを実行 $php artisan migrate // マイグレーションを巻き戻す $php artisan migrate:rollback
model作成
$php artisan make:model モデル名
controller作成
$php artisan make:controller コントローラー名 --resource
おまけ1:ルーティングの書き方 routes/web.php
Route::resource('conversation', 'ConversationController');
おまけ2:ルーティングURLの表示
$php artisan route:list
gitコマンド省略形 設定方法
gitコマンドの省略形を設定する方法です。
省略するにはgit configコマンドを使用します。
gitのbranchコマンドを、"br"と省略設定するコマンド
$ git config --global alias.br branch
実行例
$ git config --global alias.br branch $ git br * master
設定されているgitコマンドを確認する。
$ git config --global --list
実行例
$ git config --global --list alias.st=status alias.br=branch alias.cm=commit alias.ch=checkout
ちなみに --globalと言うのは、このgitユーザーでgitコマンドを使った場合に適用すると言う意味です。 他には、マシン全体に適用する --systemや、リポジトリ固有にするには空欄にすることで設定もできます。
githubに草が生えない場合に確認すべき点
githubに草が生えてこない場合に確認すべき点
原因可能性
- メールアドレス設定
- 日時設定
メールアドレス設定
ローカルと、githubアカウントのメールアドレス設定は同一でなければなりません。
コマンド
現在設定されているメールアドレスを確認
$ git config --global user.email
アドレスを設定
$ git config --global user.email "example@example.com" example@example.com
日時設定
設定日時の確認
$ date Sun Apr 1 18:04:19 JST 2018
↑この日時がずれていたら設定を見直してみてください。
参考:Homesteadの日時設定方法
https://qiita.com/shalman/items/42fcd4506b1f523c5553qiita.com
Laravel, Homestead環境構築:「No input file specified.」と表示されてブラウザ表示できない場合
Laravelの環境構築をしおり、laravelプロジェクトを立ちあげブラウザで確認したところ、No input file specified. と表示されてしまいました。 ハマってしまったので解決策を記載しておきます。
下記の記事を参考に、環境構築を行っていたところ、
【Laravel超入門】開発環境の構築(VirtualBox + Vagrant + Homestead + Composer)
事象
遭遇したのは、こんな画面です。
日本語でいうと「入力ファイルが指定されていません。」というエラーです。
原因
原因です。
そもそも、Laravelを開く以前に、ファイルが指定されていないというエラーのようなのでnginxのログを確認しました。
tail -f /var/log/nginx/homestead.test-error.log
ページを更新...
2018/03/21 06:57:39 [error] 1514#1514: *3 FastCGI sent in stderr: "Unable to open primary script: /home/vagrant/code/public/index.php (No such file or directory)" while reading response header from upstream, client: 192.168.10.1, server: homestead.test, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "192.168.10.10"
こんなエラーが記述されていました。
/home/vagrant/code/public/index.php (No such file or directory)
要点としては、「home/vagrant/code/public/index.php(そんなファイルはない)」ということでしたので、このindex.phpの指定場所が間違えているようです。
実際に、自分がLaravelのプロジェクト内のindex.phpを配置している場所はこちらでした。
/home/vagrant/code/Laravel/public/index.php
つまり、Laravelというディレクトリ配下に(code/Laravel/public/index.phpを)配置していたにも関わらず、実際に開こうとしていたファイルははcode/public/index.phpとなっていました。
このディレクトリ階層のズレによっておきてしまっていたエラーのようです。
では本当にhome/vagrant/code/public/index.php
がありさえすれば、このエラーが解消するのかを検証します。
public/index.phpを作成し、code/public/index.phpという構造を試しに作成してみます。
cd ~/code mkdir public vim public/index.php
hello worldを表示するよう記述
<?php echo "hello world";
再びブラウザを読み込むと...
hello worldが出力されました。
これで、やはりディレクトリのズレを合わせることさえできれば、Laravelのプロジェクトを読み込んでくれそうということがわかりました。
解決策
解決策です。
現在の実行環境を確認してみます。 phpのvar_exportメソッドを使い、$_SERVERというグローバル変数を確認してみます。
var_export — 変数の文字列表現を出力または返す。
$_SERVER ー どこからでも呼べるグローバル変数で、実行環境の情報等を返す。
vim index.php
<?php var_export($_SERVER);
ブラウザを更新すると環境の情報が出力されます。
その中のドキュメントルートを確認。
'DOCUMENT_ROOT' => '/home/vagrant/code/public'
nginxのログで確認したエラーのディレクトリと同様であることが確認できました。
DOCUMENT_ROOTの設定を変更すれば今回のエラーを解消できそうなことがわかりました。
/home/vagrant/code/public/index.php (No such file or directory)
今回はHome steadで環境構築をしているので、exitでローカルに戻り、
vim Homestead.yml
sites: - map: homestead.test to: /home/vagrant/code/public
to: がDOCUMENT_ROOTなので、こちらを書きかえます。
to: /home/vagrant/code/Laravel/public
設定を適用するためにローカルで書きを実行
vagrant provision
再びブラウザを更新すると...
Laravelのトップ画面が表示できました。
DOCUMENT_ROOTとLaravelのディレクトリ階層を同一にしたことで解消できました。
要点まとめ
- DOCUMENT_ROOTの指定先と、index.phpの配置箇所が違っていたことが原因。
- DOCUMENT_ROOTの指定先を合わせてあげることで解消できる。