laravel 5 - español - Especifique una ruta pública diferente
laravel tutorial (3)
Mi aplicación Laravel funciona en la carpeta privada y necesito decirle a Laravel que la ruta pública es diferente. Hoy he actualizado una aplicación Laravel de 4.2 a 5.0 y no puedo encontrar dónde especificamos la ruta pública, ya que el archivo paths.php ya no existe en Laravel 5.0 .
En laravel 4.2 teníamos el archivo /bootstrap/paths.php
:
/*
|--------------------------------------------------------------------------
| Public Path
|--------------------------------------------------------------------------
|
| The public path contains the assets for your web application, such as
| your JavaScript and CSS files, and also contains the primary entry
| point for web requests into these applications from the outside.
|
*/
''public'' => __DIR__.''/../../../public_html'',
Todavía no estoy acostumbrado con la estructura de carpetas de Laravel 5.0, cualquier ayuda sería muy apreciada.
Lo que funcionó perfectamente para mí fue agregar a public/index.php
las siguientes tres líneas:
$app->bind(''path.public'', function() {
return __DIR__;
});
Esto fue respondido en Laracast .
Creo que esto podría hacerse de diferentes maneras, aquí está el mío.
Crea un nuevo archivo auxiliar. Puede crearlo en la carpeta Services
:
# app/Services/helper.php
if ( ! function_exists(''private_path'')){
function private_path($path = ''''){
return app_path() . ''private/''
}
}
Un buen lugar para importar el archivo auxiliar es AppServiceProvider
que reside en la app/Providers/AppServiceProvider.php
. Usa el boot
para hacerlo.
public function boot()
{
include __dir__ . "/../Services/helper.php";
}
Cambie el nombre de la carpeta de public
a private
y, finalmente, puede llamar a su propia función desde cualquier lugar, como:
$path = private_path();
De acuerdo con esta publicación , para reemplazar la ruta pública original, necesitamos anular las rutas de las aplicaciones:
<?php namespace App;
use Illuminate/Foundation/Application;
class MyApp extends Application {
protected $appPaths = array();
/**
* Create a new Illuminate application instance.
*
* @param array|null $appPaths
* @return /MyApp
*/
public function __construct($appPaths = null)
{
$this->registerBaseBindings();
$this->registerBaseServiceProviders();
$this->registerCoreContainerAliases();
if (!is_array($appPaths)) {
abort(500, ''_construct requires paths array'');
}
if (!isset($appPaths[''base''])) {
abort(500, ''_construct requires base path'');
}
$this->appPaths = $appPaths;
$this->setBasePath($appPaths[''base'']);
}
/**
* Set the base path for the application.
*
* @param string $basePath
* @return $this
*/
public function setBasePath($basePath)
{
$this->basePath = $basePath;
$this->bindPathsInContainer();
return $this;
}
/**
* Bind all of the application paths in the container.
*
* @return void
*/
protected function bindPathsInContainer()
{
$this->instance(''path'', $this->path());
foreach ([''base'', ''config'', ''database'', ''lang'', ''public'', ''storage''] as $path)
{
$this->instance(''path.''.$path, $this->{$path.''Path''}());
}
}
/**
* Get the path to the application "app" directory.
*
* @return string
*/
public function path()
{
return $this->basePath.''/app'';
}
/**
* Get the base path of the Laravel installation.
*
* @return string
*/
public function basePath()
{
return $this->basePath;
}
/**
* Get the path to the application configuration files.
*
* @return string
*/
public function configPath()
{
if (isset($this->appPaths[''config''])) {
return $this->appPaths[''config''];
}
return $this->basePath.''/config'';
}
/**
* Get the path to the database directory.
*
* @return string
*/
public function databasePath()
{
if (isset($this->appPaths[''database''])) {
return $this->appPaths[''database''];
}
return $this->basePath.''/database'';
}
/**
* Get the path to the language files.
*
* @return string
*/
public function langPath()
{
if (isset($this->appPaths[''lang''])) {
return $this->appPaths[''lang''];
}
return $this->basePath.''/resources/lang'';
}
/**
* Get the path to the public / web directory.
*
* @return string
*/
public function publicPath()
{
if (isset($this->appPaths[''public''])) {
return $this->appPaths[''public''];
}
return $this->basePath.''/public'';
}
/**
* Get the path to the storage directory.
*
* @return string
*/
public function storagePath()
{
if (isset($this->appPaths[''storage''])) {
return $this->appPaths[''storage''];
}
return $this->basePath.''/storage'';
}
}
Esto me parece extraño y como se ha mencionado en el post, parece que damos un paso atrás en las funcionalidades de Laravel, espero que lo cambien en una futura actualización.