php - public_html - Laravel 5 change public_path()
this-> app-> bind('' path public (5)
En laravel 5.6 esto funciona para mí ... agregando este código a bootstrap / app.php:
$app->bind(''path.public'', function() {
return realpath(__DIR__.''/../'');
});
donde __DIR __. ''/ .. /'' es la ruta a su carpeta pública
Estoy tratando de mover la carpeta public
a otro lugar. Sin embargo, no puedo encontrar el lugar para modificar la variable public_path()
. Ahora, el ''public_path ()'' devuelve la ruta incorrecta de la carpeta.
¿Dónde puedo establecer la variable para public_path()
?
Le sugiero que lo agregue a la app/Providers/AppServiceProvider.php
:
public function register()
{
$this->app->bind(''path.public'', function() {
return realpath(base_path().''/../public_html'');
});
}
Esto también afecta a los artisan
.
Puede anular la ruta pública usando el contenedor ioc:
Lo que funcionó perfectamente para mí fue agregar a public/index.php
las siguientes tres líneas:
$app->bind(''path.public'', function() {
return __DIR__;
});
Si bien la respuesta aceptada funciona para las solicitudes provenientes de HTTP, no funcionará para artisan
.
Si necesita que un artisan
conozca su ruta pública personalizada, debe extender la clase de aplicación principal de Laravel. Sé que suena aterrador, pero en realidad es muy simple.
Todo lo que necesitas hacer es seguir:
Paso 1: en el archivo: bootstrap/app.php
cambia la primera declaración de $app
variable
$app = new Illuminate/Foundation/Application(
realpath(__DIR__.''/../'')
);
para reflejar su propia clase de aplicación personalizada:
$app = new App/Application(
realpath(__DIR__.''/../'')
);
Paso 2: defina su clase de aplicación personalizada en algún lugar. Por ejemplo, en la app/Application.php
<?php namespace App;
class Application extends /Illuminate/Foundation/Application
{
}
Felicidades! Has extendido la clase de aplicación Laravel core.
Paso 3: sobrescribe el método publicPath
. Copia y pega el método original de Laravel a tu nueva clase y cámbialo a tus necesidades. En mi caso particular, me gustó esto:
public function publicPath()
{
return $this->basePath.DIRECTORY_SEPARATOR.''..''.DIRECTORY_SEPARATOR.''public_html'';
}
¡Eso es! Puede sobrescribir cualquier método en la clase de aplicación de la misma manera.
$app->bind(''path.public'', function() {
return base_path().''/mynewpublic'';
});