[Laravel] publicフォルダのパスを変更する
例えば、「public」から「public_html」へ変更する場合。
とりあえずフォルダ名前を変えてみると・・
[ErrorException]
chdir(): No such file or directory (errno 2)
と、怒られます。
原因
/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
chdir($this->laravel->publicPath());
$host = $this->input->getOption('host');
$port = $this->input->getOption('port');
$base = $this->laravel->basePath();
$this->info("Laravel development server started on http://{$host}:{$port}/");
passthru('"'.PHP_BINARY.'"'." -S {$host}:{$port} \"{$base}\"/server.php");
}
vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php
ここ(chdir($this->laravel->publicPath());)でpublicフォルダが存在しないと。
パスはどこで登録されている?
/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
bootstrap/app.php
ここでLaravelの各パスが登録されている。
Illuminate/Foundation/Applicationクラスを見てみると、
/**
* Get the path to the public / web directory.
*
* @return string
*/
public function publicPath()
{
return $this->basePath.DIRECTORY_SEPARATOR.'public';
}
vendor/laravel/framework/src/Illuminate/Foundation/Application.php
と、パワーコーディングされており、変数等では上書きできない模様。
publicpath()をOverrideする
Illuminate\Foundation\Applicationを継承した、app/Application.phpを作成します。
<?php namespace App;
class Application extends \Illuminate\Foundation\Application {
/**
* Get the path to the public / web directory.
*
* @return string
*/
public function publicPath()
{
return $this->basePath . '/public_html';
}
}
app/Application.php
作成した\App\Applicationクラスを読み込む様に編集します。
/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/
$app = new App\Application(
realpath(__DIR__.'/../')
);
artisanコマンドで確認
$ php artisan serve
Laravel development server started on http://localhost:8000/
public_htmlフォルダが読み込まれました!
※ ディレクトリの階層を変更する場合は、public/index.php内にも変更が必要です。