【PHP】Laravelの使い方メモ

はじめに

最近 Laravel を使うことが増えました。
だんだん使い方が分かってきたのですが、おそらく数年後には忘れてしまっていると思います。。
その時のために使い方を簡単にメモしておきます

目次

テンプレート

ファイルを分けたい時

1ファイルに大量にコードを書くと使いにくいですよね。
ファイルを分割する方法です。

  • 呼び出される方

layout/header.blade.php

1
2
3
@section('header')
aaa
@endsection
  • 呼び出す方

index.blade.php

1
2
@include('layout.header')
@yield('layout.header')

コードを共通化したい時

<head>タグやスクリプト読み込みなどを全ファイルに書くのは非効率ですよね。
コードを共通化(継承)する方法です。

  • 共通コード

基本的にはそのままコードを記載する
共通じゃない部分に@yield('content')を書く

  • 共通コードを呼び出す時
1
2
3
4
5
6
// 共通コードのファイル名が`resources/views/layout/base.blade.php`の場合
@extends('layout.base')

@section('content')
aaa
@endsection

ソートしたい時

以下のライブラリを利用する
https://github.com/Kyslik/column-sortable

デフォルトのソート順を変更したい時は以下ファイルを変更する

config/columnsortable.php

1
2
3
4
5
- 'default_direction'             => 'asc',
+ 'default_direction' => 'desc',

- 'default_direction_unsorted' => 'asc',
+ 'default_direction_unsorted' => 'desc',

モデル

テーブル 作成(マイグレーション)

Laravel はマイグレーション機能があります
つまりコードから DB を自動作成できます

参考
https://readouble.com/laravel/5.5/ja/migrations.html

1
2
3
4
5
6
7
# マイグレーションファイル作成
# create_users_tableの部分はなんでも良いけど一意でないとエラーになる
php artisan make:migration create_users_table
# マイグレーション実行(DB反映)
php artisan migrate
# ロールバック(上のマイグレーション単位)
php artisan migrate:rollback

データベース から Model ファイルを作成したい時

1
php artisan code:models --table=users

初回は設定が必要
以下の手順に従う

Laravel + Eloquent で reliese/laravel を用いてモデルクラスを Scaffolding する

コントローラー

URL とコントローラーの紐付けを設定したい時

参考
https://readouble.com/laravel/5.5/ja/controllers.html

routes/web.phpを以下のように記載する

1
2
3
4
// GET
Route::get('/user/edit', 'User\HomeController@edit');
// POST
Route::post('/user/edit', 'User\HomeController@postEdit');

ログを出力したい時

  • ログ出力
1
\Log::info('test');
  • ログ確認
1
tail -f storage/logs/laravel.log

その他

ページネーションを利用したいとき

  • コントローラ
1
$users = DB::table('users')->paginate(15);
  • ビュー
1
2
3
4
5
6
7
<div class="container">
@foreach ($users as $user)
{{ $user->name }}
@endforeach
</div>

{{ $users->links() }}

参考
https://laravel.com/docs/7.x/pagination

全文検索したい時

基本的には以下の記事の通りにすれば OK
Laravel + MySQL5.7 で日本語全文検索をする方法とちょっとした注意点

上の記事はテーブル生成と同時にインデックスを作成してますが、後からインデックスを貼りたい場合は以下のようにすれば可能です。
対象の複数カラムを結合した新しいカラム(fulltext_column)を作成してます。

1
2
DB::statement("ALTER TABLE videos ADD fulltext_column TEXT AS (CONCAT(video_name, ' ', overview, ' ', product_name)) STORED");
DB::statement('ALTER TABLE videos ADD FULLTEXT index fulltext_index (`fulltext_column`) with parser ngram');

ページネーションを利用している場合

記事にあるようにクラスのスコープを利用すると取得データが 0 件になる不具合があるので以下のように記載すると良いです

1
2
- $videos = Video::freeword($request->search_word)->sortable()->paginate(2);
+ $videos = Video::whereRaw("match(`fulltext_column`) against (? IN NATURAL LANGUAGE MODE)", [$request->search_word])->sortable()->paginate(2);

ページネーション部分には以下のようにwithQueryString()を付けると2ページ目以降に検索ワードが引き継がれます

1
{!! $videos->withQueryString()->appends(\Request::except('page'))->render() !!}

変更が画面反映されない時

おそらくキャッシュが残ってしまっているのでキャッシュを削除する

1
2
3
4
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

コメントアウトしてるのにエラーになる

コメントアウトしている箇所も読み込まれます
ので内容が不正であればエラーになります

link タグが読み込まれない

パスの最初に/がないとトップページ以外の画面で読み込まれませんでした

1
2
3
4
<!-- 修正前 -->
<link rel="stylesheet" type="text/css" href="fontawesome/css/all.css" />
<!-- 修正後 -->
<link rel="stylesheet" type="text/css" href="/fontawesome/css/all.css" />

Class ‘App\Http\Controllers\Hoge’ not found

コントローラーファイルの位置に合わせて namespace も変更する必要がある
修正箇所はHoge.phpの以下の行

1
namespace App\Http\Controllers\Hoge;

ログイン機能

以下の記事に従う
Laravel のログイン認証の基本(Authentication)を完全理解する

Laravel のバージョンによってはphp artisan make:authがエラーになる
その場合は以下で同じコマンドになる

1
2
3
4
5
composer require laravel/ui --dev
php artisan ui vue --auth
php artisan clear-compiled
php artisan optimize
php artisan view:clear

ベストプラクティス

# PHP
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×