laravel アプリのローカルにあるPDFファイルをブラウザで表示する

# 目的

- laravelを構成するファイルのローカルに保存されているPDFファイルをブラウザ表示させる方法をまとめる

# 環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

- ソフトウェア環境

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージョン | 6.X | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |

# 情報

- 下記の方法で「view_pdf_app」を作成した。
    - [laravel アプリを作成してローカルサーバーを起動できるようにする](https://qiita.com/miriwo/items/b1cda3d05014e3380f93)
- この記事を書く際に検証用に記載したソースをGithubにて公開する。
    - 方法1 → [https://github.com/miriwo0104/view_pdf_laravel_app/tree/view_pdf_redirect](https://github.com/miriwo0104/view_pdf_laravel_app/tree/view_pdf_redirect)
    - 方法2 → [https://github.com/miriwo0104/view_pdf_laravel_app/tree/view_pdf_request](https://github.com/miriwo0104/view_pdf_laravel_app/tree/view_pdf_request)
    - 両方を一緒に記載 → [https://github.com/miriwo0104/view_pdf_laravel_app](https://github.com/miriwo0104/view_pdf_laravel_app)

# 方法1 `asset()`と`redirect()`を用いる

1. PDFファイルの設置
    1. 下記ディレクトリに「01_file.pdf」を設置する。(※ファイル名が同じPDFファイルなら内容は何でも良い。)
        1. `view_pdf_app/storage/app/public/pdf/01_file.pdf`
1. ルーティングの記載
    1. ルーティングファイルを編集して下記のように記載する。

        ```view_pdf_app/routes/web.php
        <?php
        
        use Illuminate\Support\Facades\Route;
        use App\Http\Controllers\PdfController;
        
        /*
        |--------------------------------------------------------------------------
        | Web Routes
        |--------------------------------------------------------------------------
        |
        | Here is where you can register web routes for your application. These
        | routes are loaded by the RouteServiceProvider within a group which
        | contains the "web" middleware group. Now create something great!
        |
        */
        
        Route::get('/', function () {
            return view('welcome');
        });
        
        Route::get('/pdf/redirect', [PdfController::class, 'showRedirect'])->name('pdf.show.redirect');
        ```

1. コントローラーファイルの作成と記載
    1. 下記コマンドをview_pdf_appディレクトリで実行する。

        ```terminal
        $ php artisan make:controller PdfController
        ```

    1. 作成したコントローラーファイルを編集して下記のように記載する。

        ```view_pdf_app/app/Http/Controllers/PdfController.php
        <?php
        
        namespace App\Http\Controllers;
        
        use Illuminate\Http\Request;
        
        class PdfController extends Controller
        {
            /**
             * リダイレクトを用いてPDFを表示する
             *
             * @return redirect|file_url
             */
            public function showRedirect()
            {
                return redirect(asset('pdf/01_file.pdf'));
            }
        }
        ```

1. ローカルサーバーを起動して下記にアクセスする。
    - [http://127.0.0.1:8000//pdf/redirect](http://127.0.0.1:8000/pdf/redirect)
1. PDFファイルがブラウザで表示される。

# 方法2 `storage_path()`と`response()`を用いる

1. PDFファイルの設置
    1. 下記ディレクトリに「01_file.pdf」を設置する。(※ファイル名が同じPDFファイルなら内容は何でも良い。)
        1. `view_pdf_app/storage/app/public/pdf/01_file.pdf`
1. ルーティングの記載
    1. ルーティングファイルを編集して下記のように記載する。

        ```view_pdf_app/routes/web.php
        <?php
        
        use Illuminate\Support\Facades\Route;
        use App\Http\Controllers\PdfController;
        
        /*
        |--------------------------------------------------------------------------
        | Web Routes
        |--------------------------------------------------------------------------
        |
        | Here is where you can register web routes for your application. These
        | routes are loaded by the RouteServiceProvider within a group which
        | contains the "web" middleware group. Now create something great!
        |
        */
        
        Route::get('/', function () {
            return view('welcome');
        });
        
        Route::get('/pdf/request', [PdfController::class, 'showRequest'])->name('pdf.show.request');
        ```

1. コントローラーファイルの作成と記載
    1. 下記コマンドをview_pdf_appディレクトリで実行する。

        ```terminal
        $ php artisan make:controller PdfController
        ```

    1. 作成したコントローラーファイルを編集して下記のように記載する。

        ```view_pdf_app/app/Http/Controllers/PdfController.php
        <?php
        
        namespace App\Http\Controllers;
        
        use Illuminate\Http\Request;
        
        class PdfController extends Controller
        {
            /**
             * リクエストを用いてPDFを表示
             *
             * @return response
             */
            public function showRequest()
            {
                return response()->file(storage_path('app/public/pdf/01_file.pdf'));
            }
        }
        ```

1. ローカルサーバーを起動して下記にアクセスする。
    - [http://127.0.0.1:8000/pdf/request](http://127.0.0.1:8000/pdf/request)
1. PDFファイルがブラウザで表示される。