File "ScribeServiceProvider.php"
Full Path: /var/www/html/back/vendor/knuckleswtf/scribe/src/ScribeServiceProvider.php
File size: 4.05 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Knuckles\Scribe;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use Knuckles\Scribe\Commands\DiffConfig;
use Knuckles\Scribe\Commands\GenerateDocumentation;
use Knuckles\Scribe\Commands\MakeStrategy;
use Knuckles\Scribe\Matching\RouteMatcher;
use Knuckles\Scribe\Matching\RouteMatcherInterface;
use Knuckles\Scribe\Tools\BladeMarkdownEngine;
use Knuckles\Scribe\Writing\CustomTranslationsLoader;
class ScribeServiceProvider extends ServiceProvider
{
public static bool $customTranslationLayerLoaded = false;
public function boot()
{
$this->registerViews();
$this->registerConfig();
$this->bootRoutes();
$this->registerCommands();
$this->configureTranslations();
// Bind the route matcher implementation
$this->app->bind(RouteMatcherInterface::class, config('scribe.routeMatcher', RouteMatcher::class));
if (!class_exists('Str')) {
// We don't want to have to use the FQN in our blade files.
class_alias(\Illuminate\Support\Str::class, 'Str');
}
}
/**
* Add docs routes for users that want their docs to pass through their Laravel app.
*/
protected function bootRoutes()
{
$docsType = config('scribe.type', 'laravel');
if (Str::endsWith($docsType, 'laravel') && config('scribe.laravel.add_routes', true)) {
$routesPath = __DIR__ . '/../routes/laravel.php';
$this->loadRoutesFrom($routesPath);
}
}
protected function configureTranslations(): void
{
$this->publishes([
__DIR__ . '/../lang/' => $this->app->langPath(),
], 'scribe-translations');
$this->loadTranslationsFrom($this->app->langPath('scribe.php'), 'scribe');
$this->loadTranslationsFrom(realpath(__DIR__ . '/../lang'), 'scribe');
}
protected function registerViews(): void
{
// Register custom Markdown Blade compiler so we can automatically have MD views converted to HTML
$this->app->view->getEngineResolver()
->register('blademd', fn() => new BladeMarkdownEngine($this->app['blade.compiler']));
$this->app->view->addExtension('md.blade.php', 'blademd');
$this->loadViewsFrom(__DIR__ . '/../resources/views/', 'scribe');
// Publish views in separate, smaller groups for ease of end-user modifications
$viewGroups = [
'views' => '',
'examples' => 'partials/example-requests',
'themes' => 'themes',
'markdown' => 'markdown',
'external' => 'external',
];
foreach ($viewGroups as $group => $path) {
$this->publishes([
__DIR__ . "/../resources/views/$path" => $this->app->basePath("resources/views/vendor/scribe/$path"),
], "scribe-$group");
}
}
protected function registerConfig(): void
{
$this->publishes([
__DIR__ . '/../config/scribe.php' => $this->app->configPath('scribe.php'),
], 'scribe-config');
$this->mergeConfigFrom(__DIR__ . '/../config/scribe.php', 'scribe');
}
protected function registerCommands(): void
{
if ($this->app->runningInConsole()) {
$this->commands([
GenerateDocumentation::class,
MakeStrategy::class,
// Retired for the same reasons as the upgrade check
// Upgrade::class,
DiffConfig::class,
]);
}
}
// Allows our custom translation layer to be loaded on demand,
// so we minimize issues with interference from framework/package/environment.
// ALso, Laravel's `app->runningInConsole()` isn't reliable enough. See issue #676
public function loadCustomTranslationLayer(): void
{
$this->app->extend('translation.loader', function ($defaultFileLoader) {
return app(CustomTranslationsLoader::class, ['loader' => $defaultFileLoader]);
});
$this->app->forgetInstance('translator');
self::$customTranslationLayerLoaded = true;
}
}