@@ -106,8 +106,16 @@ public function searchSetting(Request $request, AccessUrlHelper $accessUrlHelper
106106 $ templateMapByCategory [$ category ][$ var ] = $ templateMap [$ var ];
107107 }
108108 }
109- $ settings = $ manager ->load ($ category );
109+
110+ // Convert category to schema alias and validate it BEFORE loading/creating the form
110111 $ schemaAlias = $ manager ->convertNameSpaceToService ($ category );
112+
113+ // skip unknown/legacy categories (e.g., "tools")
114+ if (!isset ($ schemas [$ schemaAlias ])) {
115+ continue ;
116+ }
117+
118+ $ settings = $ manager ->load ($ category );
111119 $ form = $ this ->getSettingsFormFactory ()->create ($ schemaAlias );
112120
113121 foreach (array_keys ($ settings ->getParameters ()) as $ name ) {
@@ -147,6 +155,17 @@ public function updateSetting(Request $request, AccessUrlHelper $accessUrlHelper
147155 $ schemaAlias = $ manager ->convertNameSpaceToService ($ namespace );
148156
149157 $ keyword = (string ) $ request ->query ->get ('keyword ' , '' );
158+
159+ // Validate schema BEFORE load/create to avoid NonExistingServiceException
160+ $ schemas = $ manager ->getSchemas ();
161+ if (!isset ($ schemas [$ schemaAlias ])) {
162+ $ this ->addFlash ('warning ' , sprintf ('Unknown settings category "%s". Showing Platform settings. ' , $ namespace ));
163+
164+ return $ this ->redirectToRoute ('chamilo_platform_settings ' , [
165+ 'namespace ' => 'platform ' ,
166+ ]);
167+ }
168+
150169 $ settings = $ manager ->load ($ namespace );
151170
152171 $ form = $ this ->getSettingsFormFactory ()->create (
@@ -193,7 +212,6 @@ public function updateSetting(Request $request, AccessUrlHelper $accessUrlHelper
193212 ]);
194213 }
195214
196- $ schemas = $ manager ->getSchemas ();
197215 [$ ordered , $ labelMap ] = $ this ->computeOrderedNamespacesByTranslatedLabel ($ schemas , $ request );
198216
199217 $ templateMap = [];
0 commit comments