J'utilise une application Laravel avec un répertoire public externe, par ex. root/Laravel
et root/html/public
.Problème de routage d'index Laravel lors de l'utilisation pour une sous-section dans un autre fw (répertoire public externe)
J'ai besoin de cette application pour charger à partir d'un require sur un fichier php (root/html/this-section.php
) qui a déjà un autre framework le chargeant, d'où le fait que fw a sa propre tête, et son tag body. Cette application va charger entre l'en-tête et le pied de page de ce fichier. Lorsque je configure les routes, je remarque que les deux routes suivantes fonctionnent, mais j'obtiens des résultats différents.
Route::get('/', '[email protected]');
Route::get('/this-section', '[email protected]');
# this also works as a substitute for above, still same issue though
Route::get('//', '[email protected]');
Ce sont les mêmes pages, le contrôleur a le même code, je m'attendrais à ce que les pages se chargent le même. Ce qui se passe est l'index principal site.com/
se charge correctement, mais ce dernier est en cours de chargement sans les balises html <head>
et <body>
qui existent sur this-section.php
. Donc, essentiellement, ce dernier ne charge pas la page parente, son seul chargement est ce qu'il voit sur les modèles de lame.
je soupçonne peut-être soit besoin d'ajouter une ré-écriture au .htaccess pour couvrir cela, ou mettre en place une redirection personnalisée ou le retour d'une vue ou d'une réponse dans le contrôleur (je besoin d'aide ici avec des suggestions) où je peux puis faire une seconde méthode, par exemple thisSectionIndex()
et renvoyez cette suggestion.
Au début, j'avais des choses qui fonctionnaient avec l'annulation du public_path()
au chemin correct this-section
mais qui a échoué lorsque j'ai fait les sous-routes par exemple. lorsque vous utilisez la configuration de l'itinéraire suivant
Route::get('/', '[email protected]');
Route::get('/feature', '[email protected]');
Il a causé la route feature
être 500 ou 404, je pense qu'il n'a pas pu trouver les fichiers, donc je compris que je devais malheureusement ajouter dans la partie /this-section
à la route, qui a ouvert une boîte de Pandore à peu près.
Route :: get ('/', 'HomeController @ index'); Route :: get ('/ this-section', 'HomeController @ index'); Route :: get ('/ this-section/feature', 'Fonction SectionController @'); Sur une note de côté, quelques retombées pour ce que j'ai trouvé une solution de rechange temporaire pour déjà été {{assets()}}
cassé. J'ai eu assets()
remplacé pour ne pas avoir à utiliser la partie this-section/
, par exemple. comme ça {{assets(/this-section/css/styles.css)}}
. Le travail temporaire devait unfortunately
ajouter manuellement les chemins et renoncer à utiliser {{assets()}}
dans les modèles de lame jusqu'à ce que je trouve cette partie, car aucun chemin ne fonctionne pour eux maintenant.
Quelques informations de fond:
Im redéfinissant la voie publique comme celui-ci
#Laravel\app\SectionApplication
class SectionApplication extends \Illuminate\Foundation\Application
{
public function publicPath()
{
$newBasePath = $this->basePath . DIRECTORY_SEPARATOR . '..' .
DIRECTORY_SEPARATOR . 'html/this-section';
return $newBasePath;
}
}
#Laravel/bootstrap/app.php
// $app = new Illuminate\Foundation\Application(
// realpath(__DIR__.'/../')
//);
$app = new App\SectionApplication(
realpath(__DIR__.'/../')
);
Voici les pertinentes parties (ajusté) de l'indice bootstrapper de Laravel (html/this-section/index.php
)
function public_path($path = '')
{
return realpath(__DIR__);
}
//adjust your relative laravel framework path here
$laravelRelPath = '../../Laravel';
//override the blade {{asset()}} helper
function asset($path, $secure = null)
{
$newPubPath = 'this-section/'; //relative from html where the index.php will be
return app('url')->asset($newPubPath . $path, $secure);
}
.htaccess est situé en dehors de Laravel, et html/
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
#Rewritebase /this-section/
#RewriteRule ^(.*)$ this-section/$1 [L]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule^index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
Vous ** vraiment ** ne voulez pas être 'remplaçant public_path' et' asset' comme cette. – ceejayoz
Selon les meilleures suggestions sur laracast qui a été recommandé. Je pense qu'il peut avoir été ici https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5, est-ce la source du problème? Comment recommanderiez-vous? En outre, notez que j'ai l'actif commenté. – blamb
En fait, alors que c'est une bonne ressource liée ci-dessus, pour une raison quelconque (pour soutenir l'artisan je crois), je devais passer à cette solution https://stackoverflow.com/questions/31758901/laravel-5-change-public-path est ce que vous voyez dans mon exemple. – blamb