それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Laravel artisan serve で storageの画像が配信されない問題とか.user.iniでxdebugを有効にできない問題。

Laravelに移行中。

ローカル開発環境でデバッグしてると、Storageにツッコんだファイルが見れないので困ってた。

しょせん、PHPなので期待してはいけない。

よくある解決策

artisan storage:link

これで、ストレージがリンクされるから見れるはずだよ。っていうんだけど、うん見えないんだよ。

本当の原因

Stroage::url 

Storage::url が返すURLがAPP_URL を見ているので、artisan serve のポートを書かないといけない。

artisan serve コマンドを上書きする。

artisan make:command MyServer 

で、自作の起動スクリプトを作って、次のように、上書きする。

<?php

namespace App\Console\Commands;

use Illuminate\Foundation\Console\ServeCommand;

class MyServer extends ServeCommand {
  
  /**
   * Get the full server command.
   * @return string
   */
  protected function serverCommand() {
    // ini ファイルを読み込む
    $ini_scan_dir = base_path();
    $addtional_env = " PHP_INI_SCAN_DIR=:$ini_scan_dir  ";
    // serve のときは.envを無視してAPP_URLを直接渡す。
    $addtional_env .= " APP_URL=http://{$this->host()}:{$this->port()}  ";
    $cmd = parent::serverCommand();
    $cmd = $addtional_env.$cmd;
    
    return $cmd;
  }
}

artisan serve を上書きして解決する問題。

artisan serve はメインで使うように設計されてないのだろう。みんなはHomesteadでやってるから多分永遠に気づかれない。

php の phpinfoで出てくる 設定の php.ini を直接書き換えるのは面倒なので、.user.ini でやって xdebugを有効にしたり xdebug.idekey を書いたり出来るんだけど、そういうことはマイナーらしくてやらないんですね。。。。