J'essaie de déplacer le dossier public
vers un autre emplacement. Cependant, je ne trouve pas l'endroit pour modifier la variable public_path()
. Maintenant, 'public_path ()' retourne le mauvais chemin du dossier.
Où puis-je définir la variable pour public_path()
?
Vous pouvez remplacer le chemin public à l'aide du conteneur ioc:
Ce qui a parfaitement fonctionné pour moi a été d’ajouter à public/index.php
les trois lignes suivantes:
$app->bind('path.public', function() {
return __DIR__;
});
Bien que la réponse acceptée fonctionne pour les demandes provenant de HTTP, elle ne fonctionnera pas pour artisan
.
Si vous avez besoin de artisan
pour connaître votre chemin public personnalisé, vous devez étendre Laravel la classe principale de l'application. Je sais que cela semble effrayant, mais c'est en fait très simple.
Tout ce que vous devez faire est de suivre:
Step 1: Dans le fichier: bootstrap/app.php
_ change la toute première déclaration de $app
variable
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
pour refléter votre propre classe d'application personnalisée:
$app = new App\Application(
realpath(__DIR__.'/../')
);
Étape 2: Définissez votre classe d'application personnalisée quelque part. Par exemple dans app/Application.php
<?php namespace App;
class Application extends \Illuminate\Foundation\Application
{
}
Félicitations! Vous avez étendu Laravel la classe d'applications principale.
Étape 3: Écrasez la méthode publicPath
. Copiez et collez Laravel originale à votre nouvelle classe et modifiez-la en fonction de vos besoins. Dans mon cas particulier, j’ai ressemblé à ceci:
public function publicPath()
{
return $this->basePath.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'public_html';
}
C'est ça! Vous pouvez écraser n'importe quelle méthode de la classe Application de la même manière.
Je vous suggère de l'ajouter dans app/Providers/AppServiceProvider.php
:
public function register()
{
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}
Cela affecte également artisan
.
Dans laravel 5.6 cela fonctionne pour moi ... en ajoutant ce code à bootstrap/app.php:
$app->bind('path.public', function() {
return realpath(__DIR__.'/../');
});
où __ DIR __. '/ .. /' est le chemin d'accès à votre dossier public
$app->bind('path.public', function() {
return base_path().'/mynewpublic';
});