ロリポップサーバーにWEBアプリを作成する案件をGETした♪
当初は、管理画面の指示が無かったので管理画面無しで開発は進めていた。
たぶん必要だろうな・・・と思いつつも進めていたところ、
納品チェックでやはりデータの編集・削除できるようにしてほしいと言われたw
やっぱりねw
こんな事もあろうかと、Laravelで作成してたので管理画面は1時間もあれば出来るだろうと思い承諾。
※詳しいLaravelのインストールとFilamentのインストールは、私より詳しく書いている人がいるのでそれを参考にしてください。
Filamentを導入してみる
早速、composer
でFilamentをインストールしてpanel
をadmin
に設定してユーザーを作成。
ログイン画面も無事表示された。
メールアドレスとパスワードを入力して・・・と
ん? 何かおかしい。
パスワードが通常はマスクされて表示されるところが、なぜかマスクされずに平文で表示されている!?
まさかね・・・と思いつつログインボタンを押してみると、
「The POST method is not supported for route admin/login. Supported methods: GET, HEAD.」
というエラーが発生!
AIにエラーコードをそのままぶち込んで聞いてみたら、web.php
にrouteを書けと出てくるが、
それを入れても全然違うエラーが勃発して絶望。
別環境で検証してみた
とりあえず、CohonaでLaravel環境を立ち上げて別環境で検証してみると……
あれ? 普通に動くしw
まさかと思い、検証環境でサブディレクトリにコピーして動作させてみると、
見事、同じ現象が再現!
原因が判明!
そう、ロリポップサーバーにインストールした場所は、
https://デフォルトドメイン/app/public
だったのです。
今回は先方からドメインの提供が無く、デフォルトドメインで構築することになっていました。
※ここまでで、他の案件も同時進行だったこともあり、なんと5日を要した……
解決方法
ここからは解決が早かったです。
.env
に以下を追加:
APP_SUBDIR=app/public
そして、web.php
に以下を追加:
// サブディレクトリにインストールした場合
// ルートの場合は消す
Livewire::setScriptRoute(function($handle) {
return Route::get(env('APP_SUBDIR') . '/livewire/livewire.js', $handle);
});
Livewire::setUpdateRoute(function($handle) {
return Route::get(env('APP_SUBDIR') . '/livewire/update', $handle);
});
上記を追加することで、サブディレクトリでもFilamentがエラーを起こさずに使えるようになります!
反省点
最近、AIに聞くことがデフォルトになっており、自分で調べることを怠っていた。
実は、「The POST method is not supported for route admin/login. Supported methods: GET, HEAD.」で
ググったら、一番下の方にちゃんと解決策が載っていたw
そして、ログインでパスワードがマスクされない時点でDeveloper Toolでエラーを確認していれば、
example.com/livewire/livewire.js
と表示されており、PATHがおかしいことに気づけたはず……。
最後に
Filament自体は素晴らしいライブラリで、慣れれば爆速で管理画面が作れます。
ただ、ローカルと本番環境の差異には要注意。特にサブディレクトリ環境は罠が多いです。
同じような環境でハマっている方の助けになれば幸いです!
参考サイト
https://note.com/yamashita3910/n/n6cbf41a1fada
https://github.com/filamentphp/filament/discussions/11481