123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- <?php
- namespace Dcat\Admin;
- use Dcat\Admin\Contracts\ExceptionHandler;
- use Dcat\Admin\Exception\Handler;
- use Dcat\Admin\Extend\Manager;
- use Dcat\Admin\Extend\UpdateManager;
- use Dcat\Admin\Extend\VersionManager;
- use Dcat\Admin\Layout\Asset;
- use Dcat\Admin\Layout\Content;
- use Dcat\Admin\Layout\Menu;
- use Dcat\Admin\Layout\Navbar;
- use Dcat\Admin\Layout\SectionManager;
- use Dcat\Admin\Support\Context;
- use Dcat\Admin\Support\Helper;
- use Dcat\Admin\Support\Setting;
- use Dcat\Admin\Support\Translator;
- use Dcat\Admin\Support\WebUploader;
- use Illuminate\Support\Arr;
- use Illuminate\Support\Facades\Blade;
- use Illuminate\Support\ServiceProvider;
- class AdminServiceProvider extends ServiceProvider
- {
- /**
- * @var array
- */
- protected $commands = [
- Console\AdminCommand::class,
- Console\InstallCommand::class,
- Console\PublishCommand::class,
- Console\UninstallCommand::class,
- Console\CreateUserCommand::class,
- Console\ResetPasswordCommand::class,
- Console\ExportSeedCommand::class,
- Console\IdeHelperCommand::class,
- Console\FormCommand::class,
- Console\ActionCommand::class,
- Console\MenuCacheCommand::class,
- Console\MinifyCommand::class,
- Console\AppCommand::class,
- Console\ExtensionMakeCommand::class,
- Console\ExtensionInstallCommand::class,
- Console\ExtensionUninstallCommand::class,
- Console\ExtensionRefreshCommand::class,
- Console\ExtensionRollbackCommand::class,
- Console\ExtensionEnableCommand::class,
- Console\ExtensionDiableCommand::class,
- Console\ExtensionUpdateCommand::class,
- Console\UpdateCommand::class,
- ];
- /**
- * 开发环境命令.
- *
- * @var array
- */
- protected $devCommands = [
- Console\Development\LinkCommand::class,
- ];
- /**
- * @var array
- */
- protected $routeMiddleware = [
- 'admin.auth' => Http\Middleware\Authenticate::class,
- 'admin.pjax' => Http\Middleware\Pjax::class,
- 'admin.permission' => Http\Middleware\Permission::class,
- 'admin.bootstrap' => Http\Middleware\Bootstrap::class,
- 'admin.session' => Http\Middleware\Session::class,
- 'admin.upload' => Http\Middleware\WebUploader::class,
- 'admin.app' => Http\Middleware\Application::class,
- ];
- /**
- * @var array
- */
- protected $middlewareGroups = [
- 'admin' => [
- 'admin.auth',
- 'admin.pjax',
- 'admin.bootstrap',
- 'admin.permission',
- 'admin.session',
- 'admin.upload',
- ],
- ];
- public function register()
- {
- $this->aliasAdmin();
- $this->loadAdminAuthConfig();
- $this->registerRouteMiddleware();
- $this->registerServices();
- $this->registerExtensions();
- $this->commands($this->commands);
- if (config('app.debug')) {
- $this->commands($this->devCommands);
- }
- }
- public function boot()
- {
- $this->registerDefaultSections();
- $this->registerViews();
- $this->ensureHttps();
- $this->bootApplication();
- $this->registerPublishing();
- $this->compatibleBlade();
- $this->bootExtensions();
- $this->registerBladeDirective();
- }
- protected function aliasAdmin()
- {
- if (! class_exists(\Admin::class)) {
- class_alias(Admin::class, \Admin::class);
- }
- }
- protected function registerViews()
- {
- $this->loadViewsFrom(__DIR__.'/../resources/views', 'admin');
- }
- /**
- * 是否强制使用https.
- *
- * @return void
- */
- protected function ensureHttps()
- {
- if (config('admin.https') || config('admin.secure')) {
- \URL::forceScheme('https');
- $this->app['request']->server->set('HTTPS', true);
- }
- }
- /**
- * 路由注册.
- */
- protected function bootApplication()
- {
- Admin::app()->boot();
- }
- /**
- * 禁止laravel 5.6或更高版本中启用双编码的默认特性.
- *
- * @return void
- */
- protected function compatibleBlade()
- {
- $bladeReflectionClass = new \ReflectionClass('\Illuminate\View\Compilers\BladeCompiler');
- if ($bladeReflectionClass->hasMethod('withoutDoubleEncoding')) {
- Blade::withoutDoubleEncoding();
- }
- }
- /**
- * 资源发布注册.
- *
- * @return void
- */
- protected function registerPublishing()
- {
- if ($this->app->runningInConsole()) {
- $this->publishes([__DIR__.'/../config' => config_path()], 'dcat-admin-config');
- $this->publishes([__DIR__.'/../resources/lang' => $this->app->langPath()], 'dcat-admin-lang');
- $this->publishes([__DIR__.'/../database/migrations' => database_path('migrations')], 'dcat-admin-migrations');
- $this->publishes([__DIR__.'/../resources/dist' => public_path(Admin::asset()->getRealPath('@admin'))], 'dcat-admin-assets');
- }
- }
- /**
- * 设置 auth 配置.
- *
- * @return void
- */
- protected function loadAdminAuthConfig()
- {
- config(Arr::dot(config('admin.auth', []), 'auth.'));
- foreach ((array) config('admin.multi_app') as $app => $enable) {
- if ($enable) {
- config(Arr::dot(config($app.'.auth', []), 'auth.'));
- }
- }
- }
- /**
- * 默认 section 注册.
- */
- protected function registerDefaultSections()
- {
- Content::composing(function () {
- if (! admin_has_default_section(Admin::SECTION['NAVBAR_USER_PANEL'])) {
- admin_inject_default_section(Admin::SECTION['NAVBAR_USER_PANEL'], function () {
- return view('admin::partials.navbar-user-panel', ['user' => Admin::user()]);
- });
- }
- if (! admin_has_default_section(Admin::SECTION['LEFT_SIDEBAR_USER_PANEL'])) {
- admin_inject_default_section(Admin::SECTION['LEFT_SIDEBAR_USER_PANEL'], function () {
- return view('admin::partials.sidebar-user-panel', ['user' => Admin::user()]);
- });
- }
- // Register menu
- Admin::menu()->register();
- }, true);
- }
- public function registerServices()
- {
- $this->app->singleton('admin.app', Application::class);
- $this->app->singleton('admin.asset', Asset::class);
- $this->app->singleton('admin.color', Color::class);
- $this->app->singleton('admin.sections', SectionManager::class);
- $this->app->singleton('admin.extend', Manager::class);
- $this->app->singleton('admin.extend.update', function () {
- return new UpdateManager(app('admin.extend'));
- });
- $this->app->singleton('admin.extend.version', function () {
- return new VersionManager(app('admin.extend'));
- });
- $this->app->singleton('admin.navbar', Navbar::class);
- $this->app->singleton('admin.menu', Menu::class);
- $this->app->singleton('admin.context', Context::class);
- $this->app->singleton('admin.setting', function () {
- return Setting::fromDatabase();
- });
- $this->app->singleton('admin.web-uploader', WebUploader::class);
- $this->app->singleton(ExceptionHandler::class, config('admin.exception_handler') ?: Handler::class);
- $this->app->singleton('admin.translator', Translator::class);
- }
- public function registerExtensions()
- {
- Admin::extension()->register();
- }
- public function bootExtensions()
- {
- Admin::extension()->boot();
- }
- protected function registerBladeDirective()
- {
- Blade::directive('primary', function ($amt = 0) {
- return <<<PHP
- <?php echo admin_color()->primary($amt); ?>
- PHP;
- });
- }
- /**
- * 路由中间件注册.
- *
- * @return void
- */
- protected function registerRouteMiddleware()
- {
- $router = $this->app->make('router');
- // register route middleware.
- foreach ($this->routeMiddleware as $key => $middleware) {
- $router->aliasMiddleware($key, $middleware);
- }
- $disablePermission = ! config('admin.permission.enable');
- // register middleware group.
- foreach ($this->middlewareGroups as $key => $middleware) {
- if ($disablePermission) {
- Helper::deleteByValue($middleware, 'admin.permission', true);
- }
- $router->middlewareGroup($key, $middleware);
- }
- }
- }
|