未分類

Laravel使い方わかんねえよ

更新日:

予備知識ゼロから使い始めなければいけないことになったので、
ぼくごときがつまづいたところは少なからず疑問に思う人もいると思い、
その備忘。

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

-未分類

Copyright© スアゲウマイ , 2022 All Rights Reserved.