| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- <?php
- declare(strict_types=1);
- namespace SixShop\Core\Service;
- use Closure;
- use SixShop\Core\Event\BeforeRegisterRouteEvent;
- use think\facade\Event;
- use think\facade\Route;
- use think\Http;
- use function SixShop\Core\extension_name_list;
- readonly class RegisterRouteService
- {
- public function __construct(private AutoloadService $autoloadService, private Http $http)
- {
- }
- public function init(): Closure
- {
- return function () {
- $appName = $this->http->getName();
- foreach (extension_name_list() as $extensionName) {
- $extension = $this->autoloadService->getExtension($extensionName);
- if (!$extension->available()) {
- continue;
- }
- $routes = $extension->getRoutes();
- if (isset($routes[$appName])) {
- $routeFile = $routes[$appName];
- $event = new BeforeRegisterRouteEvent();
- Event::trigger($event);
- Route::group($extensionName, function () use ($routeFile) {
- include $routeFile;
- })->middleware($event->getMiddlewares(), $extensionName);
- }
- }
- };
- }
- }
|