A Laravel - user000422/0 GitHub Wiki

概要

公式ドキュメント https://laravel.com/docs/11.x

Laravel バージョン https://laravelversions.com/ja

Laravel PHP セキュリティサポート 備考
9 8.0以降 2024/02 サポート終了
10 8.1以降 2025/02
11 8.2以降 2026/02

変数はキャメルケース $userName

Laravel標準のアーキテクチャ : https://note.com/kurogoma939/n/n6623d7002690

実行速度は遅い。

■経験者談 書くのはほとんど ViewController

■構成例 (きれいに作られたCRM) https://github.com/monicahq/monica (よくできてる)https://github.com/nirav-gajera/laravel-crud-using-repository (開発時によく使うコマンド一覧)https://dev.to/ericchapman/my-beloved-laravel-cheat-sheet-3l73

■Formファサード廃止について Laravel11から廃止。 そもそもLaravel4の機能だった。それを「Collective」で無理やり使用していただけ。

導入

■RHEL8

# 一般的
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer
cd /var/www/html

# Laravelプロジェクト作成 ver指定記法
# カレントディレクトリにプロジェクトのディレクトリが作成される(配下にLaravelディレクトリ一式)
composer create-project "laravel/laravel=10.*" sample-app

ディレクトリ解説(どのプロジェクトでも共通)

アプリケーションを公開する場合はpublicをドキュメントルートにすること。

ディレクトリ名 説明
app ★ アプリのプログラム Controller Model 開発したソースを格納
bootstrap アプリ実行時に最初に行われるプログラム 基本的に変更しない
config 設定関連
database DB関連
public 外部公開用 JavaScript css 画像 ドキュメントルート
resources ★ コンパイル前の外部公開用 html(テンプレート) JavaScript × css 画像
routes ★ ルート関連 web.php
storage ファイル保存 logs エラーログ
tests PHPUnit
vendor Laravelの機能 基本手動では変更しない?
Path 説明
.env 環境変数
app/Http ★ アプリのプログラム Controllers Requests Middleware
resources/views ★ テンプレート
storage/logs/laravel.log ログ
config/database.php DB設定
config/logging.php ログ設定
config/app.php サービスプロバイダ登録
public/img 表示用画像格納
public/css css

artisan command(アーティザン)

# Laravelバージョン確認
php artisan -V

# Laravel 起動
php artisan serve
php artisan serve --port=8080  # ポート指定(指定なしの場合は 8000)

# ルート(ルーティング)一覧を表示
php artisan route:list
# アプリケーションのディレクトリでコマンドを実行すること

# make:provider コントローラーを作成
php artisan make:controller SampleController
php artisan make:controller Sample/SampleController  # ディレクトリ指定の場合
php artisan make:controller Sample/SampleController --api  # API用コントローラー

# make:model モデルを作成
php artisan make:model SampleTable

# make:request リクエストを作成
php artisan make:request SampleRequest

# make:middleware ミドルウェアを作成
php artisan make:middleware SampleMiddleware

# make:provider サービスプロバイダを作成
php artisan make:provider SampleServiceProvider

ルーティング

ファイル 用途 説明
web.php ブラウザ 基本はこちら
api.php API パスの先頭にapi/が自動付与される。

特定のアドレスにアクセスした際にどの処理を実行するか割り当てる。 Webアプリケーションのルート定義は routes/web.php で行う。 laravelのバージョンにより記述が異なる。(Laravel7構文 Route::get('/', 'SampleController@index'

// Use宣言 使用するClassのパスを設定(Laravel 8)
use App\Http\Controllers\SampleController; // useも指定しなければならない

// 基本型 : HTTPメソッド URL, [コントローラー::class, 'メソッド名']
Route::get('/sample', [SampleController::class, 'index']);

// ルートパラメータを渡す(アクションメソッドの引数をテンプレートへ渡す)
Route::get('/sample/{sample_data?}', [SampleController::class, 'index']);

// ビュールート viewのみ返す場合 第二引数のviewパスは`resources/views`以降
Route::view('/sample', 'sample');

// redirect
Route::redirect('/old-url', '/new-url');

コントローラー

artisanで作成すること。 基本的には「リクエストパラメータ取得」「サービスクラス呼び出し」「return」の3つ以外は記述しない。

リクエストはクエリーから取得 URL例)http://localhost:8000/sample?id=hoge

// サービスの呼び出し
use App\Services\SampleService;

class SampleController extends Controller
{
  // 基本型
  public function index(Request $request, SampleService $service)
  {
    // 1.HTTPリクエストの値を取得
    $sample_name = $request->input('input_name');

    // 2.ビジネスロジックの実行
    $result = $service->sampleTasks($sample_name);

    // 3.返却
    return view('sample.index');
  };

  public function sample(Request $request)
  {
    // input: request値を取得。デフォルト値の設定も可能。
    $sample_name = $request->input('input_name');
    // all: request値を全て取得。
    $sample_input = $request->all();

    // redirect URL:https://sample-domain/sample
    return redirect('sample');
  };

  // 引数に「Request $request」、「Response $response」を指定するだけでインスタンスが利用できる
  public function index(Request $request, Response $response) { /* return */ };
}

viewメソッド … アクションメソッドからテンプレートを呼び出す

// 第一引数: [テンプレートフォルダパス].[テンプレートファイル名]
// テンプレートフォルダパスは「resources/views」がカレント
return view('sample.index');

// 第二引数: 連想配列
return view('sample.index', $data);

サービスクラス

一般的に App\Services に作成する。 ビジネスロジックを扱う。コントローラーからビジネスロジックを切り離す目的。 ユーザー側から見たときの処理の内容(記事の登録、記事の更新など)を基準にServiceクラスを作成し処理を整理すると、どこに何の処理を記述すればいいかが明確で、コードも追いやすくなります。 一般的な命名CreateArticleService

<?php

namespace App\Services;

class UserService
{
    public function sample()
    {
        //
    }
}

Middleware

コントローラーを呼び出す前(後)に割り込んで処理を行う。 app/http 内に作成される。 認証済みか否か事前判定のような使い方が一般的?(要確認)

public function handle($request, Closure $next)
{
  return $next($request);
}

■登録 app/Http/Kernel.php

// 個別ミドルウェア 短縮キーの設定も可
protected $routeMiddleware = [
    'sample' => \App\Http\Middleware\Sample::class,
];

■Middlewareを使用するルートの指定 web.php に設定。

// 名前空間の設定
use App\Http\Middleware\Authenticate;

// 対象のルートにメソッドチェーンで設定
Route::get('/sample', [SampleController::class, 'index'])
->middleware(Authenticate::class);

// 複数設定の場合
Route::get('/sample', [SampleController::class, 'index'])
->middleware([Authenticate::class, Second::class]);