Structure du projet
StringBladeCompiler s’organise autour de trois grandes zones : le code source, la configuration et les tests. Le schéma ci-dessous présente l’arborescence complète.
StringBladeCompiler/
├── src/
│ ├── Compiler/
│ │ └── StringBladeCompiler.php
│ ├── Facades/
│ │ └── StringBlade.php
│ └── StringBladeServiceProvider.php
├── config/
│ └── stringblade.php
├── tests/
│ └── StringBladeCompilerTest.php
├── composer.json
├── .gitignore
├── LICENSE
└── README.md
- src/ : contient le cœur du package.
Compiler/StringBladeCompiler.phpréalise la compilation des chaînes au format Blade,Facades/StringBlade.phpfournit une façade Laravel etStringBladeServiceProvider.phpest le service provider. - config/ : héberge le fichier d’options
stringblade.php. - tests/ : regroupe les tests unitaires, principalement dans
StringBladeCompilerTest.php. - composer.json : décrit les dépendances et l’autoloading PSR.
- .gitignore, LICENSE et README.md : fichiers usuels d’exclusion Git, de licence et de documentation.
Service provider d’initialisation
Le point d’entrée du package est le service provider. Il publie la configuraton et enregistre le compilateur comme singleton dans le conteneur d’application.
<?php
namespace TerrePorter\StringBladeCompiler;
use Illuminate\Support\ServiceProvider;
class StringBladeServiceProvider extends ServiceProvider
{
public function boot()
{
$source = __DIR__ . '/../config/stringblade.php';
$destination = config_path('stringblade.php');
$this->publishes([
$source => $destination,
]);
}
public function register()
{
$this->app->singleton('stringblade', function ($container) {
return new StringBladeCompiler(
$container['files'],
$container['config']['view.compiled']
);
});
}
}
boot(): met à disposition le fichier de configuration dans l’application Laravel.register(): crée l’instance unique du compilateur en lui fournisant le gestionnaire de fichiers et le chemin des vues compilées.
Fichier de configuraton
Les options du compilateur se concentrent dans config/stringblade.php.
<?php
return [
'traceMarker' => 'IndexController: construction de la vue',
'purgeCacheAfterRender' => true,
];