最小限の設定
.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',
Practical Resources for Legacy Code Programmer
APP_NAME=Laravel
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost
とDB接続情報
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
'fallback_locale' => 'en',
'faker_locale' => 'ja_JP',
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
画像のアップロード処理を作っている。
画像というかファイル全般なのだが、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)]) }}">
というようにするとよいよ。