予備知識ゼロから使い始めなければいけないことになったので、
ぼくごときがつまづいたところは少なからず疑問に思う人もいると思い、
その備忘。
Laravel9、MySQLで構築した環境。Dockerは未使用。
MVCって何?のレベルの人間が書いている記事なので、使っている用語については気にしないでもらえると助かります。
…動けばいいんだよ たぶん。
そもそもどこにPHP置いたら表示されるのか
ただ単に「Hello World」と表示するだけのPHP(というかHTML)ファイルがあったとして、
それをどのディレクトリに設置したらいいか悩んだ。
Laravelを構築したディレクトリ直下はドキュメントルートにはならない。
3つの手順が必要。
・「resources/views」にphpを設置する
・「●●.blade.php」というファイル名にする
・「routes/web.php」に上記ファイルを設置したってことを追記する
※「routes/web.php」への追記方法
※設置したphpファイル名が「friends.blade.php」の場合
Route::get('/friends', function () {
return view('friends');
});
404になる場合
上の手順で問題なく動作した人は読み飛ばしてください。
ぼくはだめでした。
おそらく下記条件の環境な場合に、
・apacheで既にサーバー構築済み(→「php artisan serve」は使ってない)
・apacheのドキュメントルートとLaravel設置したパスが異なる
http://【自分のドメイン】/【Laravel設置したパス】/
→これはOKで
http://【自分のドメイン】/【Laravel設置したパス】/【routes/web.phpに追加したパス】
→これが404
http://【自分のドメイン】/【Laravel設置したパス】/index.php/【routes/web.phpに追加したパス】
→これはOK(だけど意図してない)
こうなるんじゃないかと。
数多くの舌打ちと貧乏ゆすりの結果、”ぼくの環境では”下記で解決しました。
sudo a2enmod rewrite
を実行し、
【Laravel設置したパス】/public/.htaccess の内容を
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
Default
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
デフォルトのこれから、下の内容に変える
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
# Default
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_URI} (.+)/$
# RewriteRule ^ %1 [L,R=301]
# Custom
RewriteRule ^(.*)/$ /【Laravel設置したパス】/$1 [L,R=301]
RewriteBase /【Laravel設置したパス】
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
その後apacheを再起動すると
sudo systemctl restart apache2
http://【自分のドメイン】/【Laravel設置したパス】/【routes/web.phpに追加したパス】
上記のようなホームディレクトリ以外でも404にならず表示してくれます。
…たぶん
※補足
【Laravel設置したパス】 は
/etc/apache2/sites-available/000-default.conf
これで設定しているエイリアスのことです。
Alias /【Laravel設置したパス】 /var/www/・・・/public
MySQLにCRUDする方法…
苦労して任意のViewを表示することができるようになりましたとさ、
だけで済むはずもなく、普通はデータベースへの読み書きが必要。
素のPHPならPDO使うなりなんなりすればいいものを、Laravelでは準備必要。
Migration(マイグレーション)とは???
加筆は続く…
参考サイト:
https://bubudoufu.com/lamp-laravel9/
https://turkey246.hatenablog.com/entry/2015/07/18/124557
https://teratail.com/questions/47368
https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04-ja