" いいね " なライフをつくる。

うそはつかない。"いいね"をつくる。じゆーうな日記です。

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.

こんな画面 f:id:tusukurukun:20180412000900p:plain

原因

  • 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の日本語公式ドキュメントの閲覧バージョンを指定すると、 該当バージョンへ自動遷移してくれるアプリを作成したので、ぜひご活用ください。

bit.ly

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)

事象

遭遇したのは、こんな画面です。 f:id:tusukurukun:20180321160904p:plain

日本語でいうと「入力ファイルが指定されていません。」というエラーです。

原因

原因です。

そもそも、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";

再びブラウザを読み込むと...

f:id:tusukurukun:20180321162029p:plain

hello worldが出力されました。

これで、やはりディレクトリのズレを合わせることさえできれば、Laravelのプロジェクトを読み込んでくれそうということがわかりました。

解決策

解決策です。

現在の実行環境を確認してみます。 phpのvar_exportメソッドを使い、$_SERVERというグローバル変数を確認してみます。

var_export — 変数の文字列表現を出力または返す。

PHP: var_export - Manual

$_SERVER ー どこからでも呼べるグローバル変数で、実行環境の情報等を返す。

PHP: $_SERVER - Manual

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

再びブラウザを更新すると...

f:id:tusukurukun:20180321164441p:plain

Laravelのトップ画面が表示できました。

DOCUMENT_ROOTとLaravelのディレクトリ階層を同一にしたことで解消できました。

要点まとめ

  • DOCUMENT_ROOTの指定先と、index.phpの配置箇所が違っていたことが原因。
  • DOCUMENT_ROOTの指定先を合わせてあげることで解消できる。