123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- namespace Knuckles\Scribe;
- use Illuminate\Support\ServiceProvider;
- use Knuckles\Scribe\Commands\DiffConfig;
- use Knuckles\Scribe\Commands\GenerateDocumentation;
- use Knuckles\Scribe\Commands\MakeStrategy;
- use Knuckles\Scribe\Commands\Upgrade;
- use Knuckles\Scribe\Matching\RouteMatcher;
- use Knuckles\Scribe\Matching\RouteMatcherInterface;
- use Knuckles\Scribe\Tools\BladeMarkdownEngine;
- use Knuckles\Scribe\Tools\Utils;
- use Knuckles\Scribe\Writing\CustomTranslationsLoader;
- class ScribeServiceProvider extends ServiceProvider
- {
- 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')) {
- // Lumen may not have the aliases set up, and 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()
- {
- if (
- config('scribe.type', 'static') === 'laravel' &&
- config('scribe.laravel.add_routes', false)
- ) {
- $routesPath = Utils::isLumen() ? __DIR__ . '/../routes/lumen.php' : __DIR__ . '/../routes/laravel.php';
- $this->loadRoutesFrom($routesPath);
- }
- }
- protected function configureTranslations(): void
- {
- $this->publishes([
- __DIR__.'/../lang/' => $this->app->langPath(),
- ], 'scribe-translations');
- if ($this->app->runningInConsole()) {
- $this->loadTranslationsFrom($this->app->langPath('scribe.php'), 'scribe');
- $this->loadTranslationsFrom(realpath(__DIR__.'/../lang'), 'scribe');
- $this->app->extend('translation.loader', function ($defaultFileLoader) {
- return new CustomTranslationsLoader($defaultFileLoader);
- });
- }
- }
- 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',
- ];
- 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,
- Upgrade::class,
- DiffConfig::class,
- ]);
- }
- }
- }
|