Lumenでパラメータが通らなかったのはPHPエラーだった件

Lumenを使ってAPIを作りたくConoHaのVPSを使って勉強しています。昨日はroutes.phpに設定したとおりにパラメータが通らなかった件を解決したつもりでした。

Lumenでurlパラメータが通らなかったけど解決した件

しかし、

$app->get('/teachers','TeacherController@index');
$app->post('/teachers','TeacherController@store');

これは、hoge.com/teachersで通るようになったものの、

$app->get('/teachers/{teachers}','TeacherController@show');
$app->put('/teachers/{teachers}','TeacherController@update');
$app->patch('/teachers/{teachers}','TeacherController@update');
$app->delete('/teachers/{teachers}','TeacherController@destroy');

hoge.com/teachers/1

のようにteachersのidをパラメータとして追加したのは通っていませんでした。

目次

apache側の問題じゃなかった

当初、前回と同じようにapache側の問題なのかと思っていたのですが実はそうではありませんでした。

APIはPostmanというアプリを使って検証していたのですが、hoge.com/teachers/1でgetしようとすると、何も表示されず、いわゆる白い画面という状態でした。

Postman | Supercharge your API workflow

しかし、postmanにはstatusという表示があり、そこを確認したところ「500」でサーバー側のエラがー表示されている状態でした。

サーバーのエラーログを確認

なにかPHPでこけているようなのでエラーログを確認してみました。

場所はこちら

/var/log/httpd/error_log

すると、

PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/LumenAPI/storage/logs/lumen.log" could not be opened: failed to open stream: Permission denied'

storage/logs/lumen.logが、書き込みできないとのエラーがでていました。

一旦、chmod 777にしてこのエラーが回避できるか確認し、その後、環境に合わせて適切に設定することにしました。

結果を確認すると、

エラー

BadRouteException in RegexBasedAbstract.php line 102:
Cannot use the same placeholder "teachers" twice

このように、今まで真っ白だった画面に別のエラーが表示されました。

とりあえず、書き込みできないエラーは解決したようです。ただ、routes.phpにどこかエラーがでているようです。

で、1行づつ試しながらいま取り組んでいるのですが、routes.phpに書いたとおり無事にレスポンスが返ってくるようになりました。

lumen

まとめ

慣れないVPS環境で初めてやるPHPフレームワークを使いわからないことだらけですが、問題が起こったときは

1. 何がおこっているか状況を確認する

今回、よくみるとstatusに500が返ってきてたので、apacheの問題ではなくphp側の問題だったことが最初からわかっていたはず

2. ログをみる

エラーの内容はしっかりと、 /var/log/httpd/error_logにかかれていました。

ということで、少しづつVPS環境とLumenでの開発で昨日の自分よりも成長しつつあります。

現在、ユーデミーというe-learningサイトのlumenのコースで勉強しているので、はやくこのコースを終了して、自分のAPIを作れるよう引き続きがんばります!

Udemy