4848use Triangle \Engine \Config ;
4949use Triangle \Engine \Context ;
5050use Triangle \Engine \Path ;
51+ use Triangle \Engine \Plugin ;
5152use Triangle \Exception \ExceptionHandler ;
5253use Triangle \Exception \ExceptionHandlerInterface ;
5354use Triangle \Middleware \Bootstrap as Middleware ;
@@ -169,7 +170,6 @@ public function onWebsocketConnect(TcpConnection &$connection, Http\Request $req
169170 str_contains ($ path , "\0" )
170171 ) {
171172 // Логирование небезопасного URL и закрытие соединения с кодом 422
172- Server::log ('Небезопасный URL: ' . $ path . PHP_EOL );
173173 static ::close_http ($ connection , 422 );
174174 return null ;
175175 }
@@ -200,32 +200,31 @@ public function onWebsocketConnect(TcpConnection &$connection, Http\Request $req
200200 // Определение контроллера и действия
201201 if (is_array ($ callback )) {
202202 $ controller = $ callback [0 ];
203- $ plugin = static :: getPluginByClass ($ controller );
203+ $ plugin = Plugin:: app_by_class ($ controller );
204204 $ app = static ::getAppByController ($ controller );
205205 $ action = static ::getRealMethod ($ controller , $ callback [1 ]) ?? '' ;
206206 } else {
207- $ plugin = static :: getPluginByPath ($ path );
207+ $ plugin = Plugin:: app_by_path ($ path );
208208 }
209209
210210 // Получение callback для маршрута
211- $ callback = static ::getCallback ($ plugin , $ app , $ callback , $ args );
211+ $ callback = static ::getCallback ($ plugin , $ callback , $ args );
212212 break ;
213213 case Dispatcher::NOT_FOUND :
214214 // Маршрут не найден
215215 $ route = null ;
216216 $ controllerAndAction = static ::parseControllerAction ($ path );
217- $ plugin = $ controllerAndAction ['plugin ' ] ?? static :: getPluginByPath ($ path );
217+ $ plugin = $ controllerAndAction ['plugin ' ] ?? Plugin:: app_by_path ($ path );
218218
219219 $ app = $ controllerAndAction ['app ' ];
220220 $ controller = $ controllerAndAction ['controller ' ];
221221 $ action = $ controllerAndAction ['action ' ];
222222
223223 // Получение callback для контроллера и действия
224- $ callback = static ::getCallback ($ plugin , $ app , [$ controller , $ action ]);
224+ $ callback = static ::getCallback ($ plugin , [$ controller , $ action ]);
225225 break ;
226226 case Dispatcher::METHOD_NOT_ALLOWED :
227227 // Метод не поддерживается
228- Server::log ('Метод GET не поддерживается для ' . $ path . PHP_EOL );
229228 static ::close_http ($ connection , 405 );
230229 return null ;
231230 }
@@ -274,7 +273,6 @@ public function onWebsocketConnect(TcpConnection &$connection, Http\Request $req
274273 }, $ callback );
275274 }
276275
277- Server::log ('Рукопожатие успешно: ' . $ path . PHP_EOL );
278276 return $ callback ($ request );
279277 } catch (Throwable $ e ) {
280278 // Обработка исключений и закрытие соединения
@@ -446,11 +444,11 @@ public static function close_http(TcpConnection $connection, int|Response $statu
446444 */
447445 protected static function exceptionResponse (Throwable $ e , mixed $ request ): Response
448446 {
449- try {
450- // Получение приложения и плагина из запроса
451- $ app = $ request ->app ?: '' ;
452- $ plugin = $ request ->plugin ?: '' ;
447+ // Получение приложения и плагина из запроса
448+ $ app = $ request ?->app ?: '' ;
449+ $ plugin = $ request ?->plugin ?: '' ;
453450
451+ try {
454452 // Получение конфигурации обработчика исключений
455453 $ exceptionConfig = static ::config ($ plugin , 'exception ' );
456454 $ defaultException = $ exceptionConfig ['' ] ?? ExceptionHandler::class;
@@ -514,13 +512,13 @@ public static function server(): ?Server
514512 *
515513 * @param string $plugin Плагин.
516514 * @param string $key Ключ конфигурации.
517- * @param mixed $default Значение по умолчанию.
515+ * @param mixed|null $default Значение по умолчанию.
518516 * @return array|mixed|null Возвращает значение конфигурации или значение по умолчанию.
519517 */
520- protected static function config (string $ plugin , string $ key , $ default = null ): mixed
518+ protected static function config (string $ plugin , string $ key , mixed $ default = null ): mixed
521519 {
522520 // Получаем значение конфигурации для указанного плагина и ключа
523- return Config::get ($ plugin ? " plugin. $ plugin. $ key " : $ key , $ default );
521+ return Config::get ($ plugin ? config ( ' app.plugin_alias ' , ' plugin ' ) . " . $ plugin. $ key " : $ key , $ default );
524522 }
525523
526524 /**
@@ -538,20 +536,19 @@ public static function container(string $plugin = ''): ContainerInterface|array|
538536 /**
539537 * Функция для получения обратного вызова.
540538 *
541- * @param string $plugin Плагин.
542- * @param string $app Приложение.
539+ * @param string|null $plugin Плагин.
543540 * @param mixed $call Вызов.
544541 * @param array|null $args Аргументы.
545542 * @return callable|Closure Возвращает обратный вызов.
546543 * @throws ContainerExceptionInterface
547544 * @throws NotFoundExceptionInterface
548545 * @throws ReflectionException
549546 */
550- protected static function getCallback (string $ plugin, string $ app , mixed $ call , array $ args = null ): callable |Closure
547+ protected static function getCallback (? string $ plugin , mixed $ call , array $ args = null ): callable |Closure
551548 {
552549 // Преобразование аргументов в массив значений, если они не равны null
553550 $ args = $ args === null ? null : array_values ($ args );
554- $ middlewares = [] ;
551+ $ plugin ??= '' ;
555552
556553 // Проверяем, нужно ли внедрять зависимости в вызов
557554 $ needInject = static ::isNeedInject ($ call , $ args );
@@ -713,20 +710,6 @@ protected static function resolveInject(string $plugin, array|Closure $call): Cl
713710 };
714711 }
715712
716- /**
717- * @param string $controllerClass
718- * @return string
719- */
720- public static function getPluginByClass (string $ controllerClass ): string
721- {
722- $ controllerClass = trim ($ controllerClass , '\\' );
723- $ tmp = explode ('\\' , $ controllerClass , 3 );
724- if ($ tmp [0 ] !== 'plugin ' ) {
725- return '' ;
726- }
727- return $ tmp [1 ] ?? '' ;
728- }
729-
730713 /**
731714 * @param string $controllerClass
732715 * @return mixed|string
@@ -735,7 +718,7 @@ protected static function getAppByController(string $controllerClass): mixed
735718 {
736719 $ controllerClass = trim ($ controllerClass , '\\' );
737720 $ tmp = explode ('\\' , $ controllerClass , 5 );
738- $ pos = $ tmp [0 ] === ' plugin ' ? 3 : 1 ;
721+ $ pos = $ tmp [0 ] === config ( ' app.plugin_alias ' , ' plugin ') ? 3 : 1 ;
739722 if (!isset ($ tmp [$ pos ])) {
740723 return '' ;
741724 }
@@ -760,26 +743,6 @@ protected static function getRealMethod(string $class, string $method): string
760743 return $ method ;
761744 }
762745
763- /**
764- * Функция для получения плагина по пути.
765- *
766- * @param string $path Путь.
767- * @return string Возвращает имя плагина, если он найден, иначе возвращает пустую строку.
768- */
769- public static function getPluginByPath (string $ path ): string
770- {
771- // Удаляем слэши с начала и конца пути
772- $ path = trim ($ path , '/ ' );
773- // Разбиваем путь на части
774- $ tmp = explode ('/ ' , $ path , 3 );
775- // Если первая часть пути не равна 'app', возвращаем пустую строку
776- if ($ tmp [0 ] !== 'app ' ) {
777- return '' ;
778- }
779- // Возвращаем вторую часть пути (имя плагина) или пустую строку, если она не существует
780- return $ tmp [1 ] ?? '' ;
781- }
782-
783746 /**
784747 * Функция для разбора контроллера и действия из пути.
785748 *
@@ -797,19 +760,15 @@ protected static function parseControllerAction(string $path): false|array
797760 return $ cache [$ path ];
798761 }
799762
800- // Разбиваем путь на части
801- $ pathExplode = explode ('/ ' , trim ($ path , '/ ' ));
802-
803763 // Проверяем, является ли путь плагином
804- $ isPlugin = isset ($ pathExplode [1 ]) && $ pathExplode [0 ] === 'app ' ;
805-
806- // Получаем префиксы для конфигурации, пути и класса
807- $ configPrefix = $ isPlugin ? "plugin. $ pathExplode [1 ]. " : '' ;
808- $ pathPrefix = $ isPlugin ? "/app/ $ pathExplode [1 ]" : '' ;
809- $ classPrefix = $ isPlugin ? "plugin \\$ pathExplode [1 ]" : '' ;
764+ $ plugin = Plugin::app_by_path ($ path );
810765
811766 // Получаем суффикс контроллера из конфигурации
812- $ suffix = Config::get ("{$ configPrefix }app.controller_suffix " , '' );
767+ $ suffix = static ::config ($ plugin , 'app.controller_suffix ' , '' );
768+
769+ // Получаем префиксы для конфигурации, пути и класса
770+ $ pathPrefix = $ plugin ? "/ " . config ('app.plugin_uri ' , 'app ' ) . "/ $ plugin " : '' ;
771+ $ classPrefix = $ plugin ? config ('app.plugin_alias ' , 'plugin ' ) . "\\$ plugin " : '' ;
813772
814773 // Получаем относительный путь
815774 $ relativePath = trim (substr ($ path , strlen ($ pathPrefix )), '/ ' );
@@ -900,7 +859,7 @@ protected static function getControllerAction(string $controllerClass, string $a
900859 // Если класс контроллера и действие найдены, возвращаем информацию о них
901860 if (($ controllerClass = static ::getController ($ controllerClass )) && ($ action = static ::getAction ($ controllerClass , $ action ))) {
902861 return [
903- 'plugin ' => static :: getPluginByClass ($ controllerClass ),
862+ 'plugin ' => Plugin:: app_by_class ($ controllerClass ),
904863 'app ' => static ::getAppByController ($ controllerClass ),
905864 'controller ' => $ controllerClass ,
906865 'action ' => $ action
@@ -927,7 +886,7 @@ protected static function getController(string $controllerClass): false|string
927886
928887 // Разбиваем полное имя класса на части
929888 $ explodes = explode ('\\' , strtolower (ltrim ($ controllerClass , '\\' )));
930- $ basePath = $ explodes [0 ] === ' plugin ' ? Path::basePath (' plugin ' ) : app_path ();
889+ $ basePath = $ explodes [0 ] === config ( ' app.plugin_alias ' , ' plugin ') ? Path::basePath (config ( ' app.plugin_alias ' , ' plugin ') ) : app_path ();
931890 unset($ explodes [0 ]);
932891 $ fileName = array_pop ($ explodes ) . '.php ' ;
933892 $ found = true ;
0 commit comments