Il est rare que nous ayons besoin d’étendre le noyau de Laravel, et même lorsque nous le faisons, il est très probable que nous allons étendre des composants spécifiques, ce qui est détaillé dans la documentation.
Cependant, toutes ces instructions supposent que vous utilisez l’application principale Laravel (conteneur IOC) pour étendre les autres classes. Que faire si vous souhaitez prolonger la Application
lui-même?
Ceci est en fait un exemple réel
Cela est apparu récemment parce que certaines personnes se demandent si Laravel 5 devrait ou non faciliter la modification des chemins de dossier par défaut, par exemple en changeant storage
l’emplacement de ou modifier public
être public_html
. Il n’y a, au moment d’écrire ces lignes, aucun moyen simple de le faire autre que d’étendre l’application, et cela inquiète certaines personnes.
Alors faisons-le. Prenons une application Laravel 5, étendons son Application
et changez son chemin de stockage pour être /OMGStorage
.
Prolongez-le
Tout d’abord, créez une classe d’application quelque part dans votre espace de noms et faites-la s’étendre Illuminate\Foundation\Application
. Par exemple:
<?php namespace Confomo;
class Application extends \Illuminate\Foundation\Application
{
}
Enregistrez-le
Maintenant, trouvons où Illuminate\Foundation\Application
est attaché. Heureusement, c’est simple : bootstrap/app.php
. Le premier code non-commentaire dans le fichier est :
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
Je pense que vous pouvez deviner ce qui va suivre. Remplacez simplement ces lignes par celles-ci :
$app = new Confomo\Application(
realpath(__DIR__.'/../')
);
C’est ça. Nous utilisons maintenant notre coutume Application
partout à travers le site.
Remplacer (étendre) vos méthodes
Donc, si notre objectif est de remplacer la fonctionnalité dans Application
qui fournit l’emplacement pour storage
répertoire, la dernière étape consiste à trouver cette fonctionnalité et à la remplacer.
Heureusement encore, un coup d’œil rapide à travers le Illuminate\Foundation\Application
class rend cela très clair : il existe une méthode nommée storagePath
:
/**
* Get the path to the storage directory.
*
* @return string
*/
public function storagePath()
{
return $this->basePath.'/storage';
}
… alors, faisons nos affaires. Dans notre coutume Application
remplaçons cette méthode :
<?php namespace Confomo;
class Application extends \Illuminate\Foundation\Application
{
/**
* Get the path to the storage directory.
*
* @return string
*/
public function storagePath()
{
return $this->basePath.'/OMGstorage';
}
}
… Et.. Voila. Nous venons de personnaliser ce chemin. Et, bien sûr, nous pouvons utiliser ce même ensemble d’étapes pour étendre tout ce que le Application
classe fournit à Laravel.
conclu
C’est ça! J’espère que cela vous donne la liberté et le pouvoir de prendre plus de contrôle sur vos sites Web basés sur Laravel, ainsi que l’encouragement à parcourir encore plus le noyau pour apprendre comment tout fonctionne.