I am trying to move the public
folder to other place. However, I can't find the place to modify public_path()
variable. Now, the 'public_path()' return the wrong path of folder.
Where can I set the variable for public_path()
?
You can override the public path using ioc container :
What worked for me flawlessly was adding to public/index.php
the following three lines:
$app->bind('path.public', function() { return __DIR__; });
For more detailed explanation click here
While accepted answer works for requests coming from HTTP, it will not work for artisan
.
If you need artisan
to know your custom public path, you need to extend Laravel main Application class. I know it sounds scary, but it's actually very simple.
All you need to do is following:
Step 1: In the file: bootstrap/app.php
change the very first declaration of $app
variable
$app = new Illuminate\Foundation\Application( realpath(__DIR__.'/../') );
to reflect your own custom Application class:
$app = new App\Application( realpath(__DIR__.'/../') );
Step 2: Define your custom Application class somewhere. For example in app/Application.php
<?php namespace App; class Application extends \Illuminate\Foundation\Application { }
Congrats! You have extended Laravel core Application class.
Step 3: Overwrite the publicPath
method. Copy and paste Laravel original method to your new class and change it to your needs. In my particular case I did like this:
public function publicPath() { return $this->basePath.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'public_html'; }
That's it! You can overwrite any method in Application class the same way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With