larevelの初期設定

最小限の設定

.env

APP_NAME=Laravel
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

とDB接続情報

config/app.php

'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
'fallback_locale' => 'en',
'faker_locale' => 'ja_JP',

laravel本番設置時のポイント

1..env ファイル

DB設定を書き換え
APP_ENV=local をproduction に
APP_DEBUG=true をfalseに

2.ドキュメントルート以下のindex.php(設置ディレクトリ)

laravel(本体)のパスを書き換え
autoload.php
app.php

3.ファイルのパーミッション設定

/laravel/storage/logs/laravel.log
/laravel/bootstrap/cache directory
/laravel/storage/framework/sessions
/laravel/storage/framework/views

稼いだポイントをマイルへ!陸マイラー御用達モッピー

laravelでrouteのパラメータにスラッシュが含まれるとき

画像のアップロード処理を作っている。
画像というかファイル全般なのだが、Fileというモデルで一括管理していて、保存先は

/storage/app/uploads

になっている。ここに保存した画像をどうやって表示するか、ということなのだけど、laravel本体はドキュメントルートの上に設置されているので、直接リンクしても表示されない。

ということで、表示用のrouteを作る。
イメージとしては

/files/ファイルのパス/ファイル名

みたいなURLで呼び出すと、その画像が表示されればいいかなと。
で、いざやってみると、ファイルのパスということでパラメータにスラッシュが入っているのでうまく動かないのだ。

base64_encode しないとだめなんだそうで。

ということで、web.php を、

use Illuminate\Support\Facades\Storage;

Route::get('/files/{filePath}', function ($filePath) {
    $filePath = base64_decode($filePath);
    $path = storage_path('app/' . $filePath);

    if (!Storage::disk('local')->exists($filePath)) {
        abort(404);
    }

    return response()->file($path);
})->name('files.show');

として、ビューの方は

<img src="{{ route('files.show', ['filePath' => base64_encode($user->file->filepath . '/' . $user->file->filename)]) }}">

というようにするとよいよ。