working public_path public_html not change app php laravel laravel-5

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__; });

Para una explicación más detallada, haga clic aquí


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''; });