Closed30

Laravel入門ざっくり備忘録

Laravel環境構築はDocker+Laravel Sailがおすすめ一択。動作が軽い。
windowsはubuntu(wsl)をインストールして使用する。

参考

https://chigusa-web.com/blog/laravel-sail/

Laravel9はphp7.4では使用できないため、Laravel8がインストールされるようphp74を指定してインストールする必要がある。

inst.shに書き出す

curl -s "https://laravel.build/myapp?with=mysql" > inst.sh

laravelsail/php81-composer:latest の箇所をphp74に変更

laravelsail/php74-composer:latest \

ファイルに記載されたコマンド実行

bash inst.sh

このとき下記のようになエラーが表示された場合は、一度dockerを再起動すると直す場合がある。

Cannot create project directory at "/opt/example-app", it exists as a file.

参考

https://hkzo.org/2021/10/your-composer-dependencies-require-a-php-version-8-0-0/

https://stackoverflow.com/questions/66776511/laravel-sail-how-to-remove-created-application

【Laravelのプロジェクト名を変更する方法】

1.curlで新しくLaravelプロジェクトを作成する。
2.新プロジェクト内にできたファイルを削除して、旧プロジェクトのファイルをすべて新プロジェクトのディレクトリに入れる。
3.envファイルなど、プロジェクト名がファイル内に記載されたものがあるので置換してsail up -dする。
4.sail php artisan migrate でDBにテーブルを作成。
5.データも移行するならphpMyAdminから手動でDLして新DBにインポート。

サイトが見れれば成功。

ログイン画面はBreezeかJetstreamで即実装可能。
ただ、SNSログインはパスワードなどの情報が引っ張れないため、会員情報編集ができなくなるため難しい。

参考

https://chigusa-web.com/blog/laravel8-breeze/

ログイン後のダッシュボードはAdminLTEで超簡単実装。

ロゴの変更は下記にイメージを入れて、
public\vendor\adminlte\dist\img

下記のファイルのlogo_imgのパスを変更すればOK
config\adminlte.php

参考

https://chigusa-web.com/blog/laravel-adminlte/

ダッシュボードにFullCalendarを表示する方法。

schedulesのDB追加して、登録用のModel作成して、
コントローラ作成してweb.phpでルーティングするまでは手筋。

calendar.jsを作成してapp.jsでrequireしてる。
app.jsはblade内でmixして読み込む。
FullcalendarはnpmでInstallする。
カレンダーに登録したデータがドラッグ&ドロップできないので調査中。

参考

https://chigusa-web.com/blog/laravel-fullcalendar/#comment-39

Fullcalendarを非同期でデータ更新した後、再描画する方法。

calendar.refetchEvents();

サービスプロバイダをphp artisan make:provider {{クラス名}} で作成し、config/app.php のprovidersに登録して読み込ませる。
providerのクラスメソッドregister()で、コンテナに登録する際には、bind()とsingleton()で登録(結合)する方法があり、singletonは生成されたインスタンスを保持し、ページ読み込みごとに同じインスタンスを返す。

下記を実行するとbindが違う値、singletonは同じ値を取得する。
※getNum()はインスタンス生成時にランダム値をプロパティに格納しているというクラスメソッド。

$bookService = app()->make('book');
$book1 = $bookService->getNum();
$bookService = app()->make('book');
$book2 = $bookService->getNum();

dd($book1, $book2);

参考

https://laraweb.net/practice/1960/
https://qiita.com/ucan-lab/items/738abfd650be76333da6

ファサードの使用と、エイリアスの登録方法
ファサードは静的メソッドのように利用でき、app()->make()でいちいち呼び出さなくてよい。ほかのメリットについては調査中。

https://chigusa-web.com/blog/laravel-facade/

Validateクラスの使い方。

Controllerで下記のようにvalidateを設定し、bladeに検証結果を渡せる。

$validated = $request->validate([
        'item_name' => 'required|unique:items|max:255',
    ],
    [
        'item_name.required' => 'アイテム名を入力してください',
        'item_name.unique' => 'アイテム名を被らないように入力してください',
        'item_name.max' => '最大255文字まで',
    ]);

https://www.spiceworks.co.jp/blog/?p=11533

リダイレクトでパラメータを付与する方法。
web.phpで任意に付けたルート名を指定して、リダイレクトできる。
また、下記のようにパラメータを付与することもできる。
※sampleがルートの名前

return redirect(route('sample', [
    'param1' => $param1,
    'param2' => $param2,
]));

https://awesome-linus.com/2019/05/09/redirect-route-add-parameter/

直前まで表示しているページにリダイレクトする場合は、back()関数だけでリダイレクト可能。
エラーの際の記述を簡潔化できてよい。

Form送信などでバリデートチェックした際に、エラーがあり入力値をそのまま戻す場合は、
redirectの際にwithInputを使用すると入力値を渡せる。
下記ではback()を使用しているが、当然redirect()でも同じように使用できる。

return back()->withInput();

受け取りのbladeでは下記のようにold関数を使用しておく。

<input type="text" name="email" value="{{ old('email') }}">問い合わせ内容

https://blog.capilano-fw.com/?p=566#i-2

メッセージを渡す場合は、withメソッドを使用する。

return redirect('home')->with('result', '成功です!');

bladeで受け取り表示

{{ session('result') }}

Herokuへのデプロイ方法。

herokuでアカウント登録して、OSにherokuをInstallして設定して、herokuにデプロイする。

参照

https://chigusa-web.com/blog/heroku-laravel/
https://ayaka-weblog.com/programming/laravel/laravel-heroku/

heroku run php artisan migrate にて
Error: connect ETIMEDOUT ...:5000
というエラーが出た場合は、5000番ポートが閉じられているので開放するか、
heroku run:detached php artisan migrate
を使用する。この場合、コンソールに結果ログが出ないので heroku logs で確認する必要があるので注意。

参照

https://qiita.com/Moo_Moo_Farm/items/7b68ca43cb7370cfcfc8

DBのやりとりはModelを作成してEloquentクラスを介して行う。
SQLを直接書く必要がないのでとても簡単。

Modelの作成からEloquentの使い方まで参考

https://qiita.com/shosho/items/5ca6bdb880b130260586

【さくらサーバへのデプロイ方法】

・ローカルのLaravelプロジェクトをgithubにpushしておく

・さくらサーバにsshログインして、home/アカウント名に移動。

・backspaceでvim削除できるようにする。
エディタはbashだとうまく操作できないのでコマンドプロンプトで作業する。
vim .vimrc コマンドを入力し新規ファイルに下記を記載して保存。
set backspace=indent,eol,start

・home/アカウント名/ で git cloneする。(passを求められた場合はtokenなので注意)

・作成されたLaravelプロジェクトにcdで移動し、composerをインストールする
ダウンロードしてから
curl -sS https://getcomposer.org/installer | php

インストールする。
php composer.phar

・次にLaravel関連のデータをインストールする。
php composer.phar install

・プロジェクト直下にローカルの.envファイルを複製する。
vim .env
してローカルのデータを貼り付け。もしくはFTPでupload

・.envのAPP_KEYが入力されている場合は空文字にする。(後ほど設定するため)

・.envの中身のDB情報をさくらのものに書き換える
(DB_HOSTは()書き内の初期ドメインでないと接続できないので注意)

DB_CONNECTION=mysql
DB_HOST=さくらのDBサーバ
DB_PORT=3306
DB_DATABASE=さくらのレンタルサーバで作成したDB名
DB_USERNAME=さくらのDBアカウント名
DB_PASSWORD=さくらのDBパスワード

・APP_KEYを設定するために下記コマンドを実行
php artisan key:generate
「Application key set successfully.」と表示されれば成功。何も表示されない場合は多分composerが正しくインストールされていない。

・続いてmigarationファイルを基に、さくらのDBにテーブルを作成する。
php artisan migrate
下記のような表示になれば成功

・最後にさくらはwww内のディレクトリが公開ディレクトリとなるため、シンボリックリンクを使ってLaravelプロジェクトのpublicディレクトリを表示させるため、下記コマンドを実行。

ln -s /home/さくらのアカウント名/Laravelプロジェクト名/public /home/さくらのアカウント名/www/任意のフォルダ名

・ここまででほぼ完了だが、画像upload機能が搭載されている場合は下記コマンドも実行しておく。

php artisan storage:link

シーダー
rest
db pagenate

Eloquentのjoin()とwith()は取得結果が異なる。
with()は重複なしで返すが、join()は重複した値が返る。
join()でもdistinct()を使用すれば同じ事では?と思うが、
join()使用時にdistinct()を使用例に挙げているサイトが見つからないため、
確定ではない。

クエリ自体は別で投げて結果を結合するunion()というビルダーもある。

参考

https://cloudsmith.co.jp/blog/backend/laravel/2020/07/1506704.html
https://readouble.com/laravel/5.7/ja/queries.html
https://poppotennis.com/posts/laravel-union

sail php artisan migrate:fresh
時に下記エラーが出た際の対処法。
chmod(): Operation not permitted

キャッシュを削除する。

 ./vendor/bin/sail root-shell

#このコマンドでしばらく停止するので動き出すまで待機
composer dump-autoload

php artisan clear-compiled

php artisan optimize

php artisan config:cache

再度migrate実行するとうまくいくはず。

参考

https://zenn.dev/de_teiu_tkg/articles/f9563162903400

php artisan migrate:fresh --seed

上記コマンドにて、dbの削除と再登録後に、seedファイルも実行できる。

このスクラップは3ヶ月前にクローズされました
作成者以外のコメントは許可されていません