最小限の設定
.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)]) }}">
というようにするとよいよ。
jsonを生成する時に単純に
$json = json_encode($str);
としていないだろうか。単なる数値だけならこれでよいが、例えば、
$str[1] = "G'men '75";
$str[2] = '\2,800';
$str[3] = 'my name is "john"';
というような文字列をエンコードしてjavascriptに渡すとエラーになる。
$json = json_encode($str, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS );
$json = str_replace('\\', '\\\\', $json);
とするのがよい。