मैं मिडलवेयर क्लास में वर्तमान I रूट का नाम प्राप्त करना चाहता हूं। इससे पहले (स्लिम 2 में *) आप वर्तमान मार्ग तो जैसे लाने सकता है:स्लिम 3 मिडलवेयर में वर्तमान मार्ग प्राप्त करें
$route = $this->app->router->getCurrentRoute();
लेकिन इस समारोह स्लिम के 3.0 संस्करण में हटा दिया गया है। मैं Slim\App
की __invoke
विधि में निम्नलिखित कोड मिल गया है:
// Get the route info
$routeInfo = $request->getAttribute('routeInfo');
/** @var \Slim\Interfaces\RouterInterface $router */
$router = $this->container->get('router');
// If router hasn't been dispatched or the URI changed then dispatch
if (null === $routeInfo || ($routeInfo['request'] !== [$request->getMethod(), (string) $request->getUri()])) {
$request = $this->dispatchRouterAndPrepareRoute($request, $router);
$routeInfo = $request->getAttribute('routeInfo');
}
यह बताता है कि वर्तमान मार्ग Request
में विशेषता routeInfo
के रूप में जमा है। लेकिन ऐसा लगता है कि मेरी कस्टम मिडलवेयर क्लास को विशेषता सेट करने से पहले बुलाया जाता है ($this->dispatchRouterAndPrepareRoute($request, $router);
विधि द्वारा)। क्योंकि $request->getAttribute('routeInfo')
पर कॉल करने से NULL
पर हल हो जाता है।
तो मेरा सवाल है; मैं मिडलवेयर फ़ंक्शन/क्लास से वर्तमान मार्ग (या मार्ग का नाम) कैसे प्राप्त कर सकता हूं?
या मुझे सिर्फ Slim\App
से ऊपर दिए गए कोड का टुकड़ा कॉपी करना चाहिए?
मुझे भी मध्य मार्ग में वर्तमान मार्ग प्राप्त करने में परेशानी हो रही है। मैंने 'setRouteBeforeAppMiddleware' => true' सेट किया है और जब मैं '$ रूट = $ अनुरोध-> getAttribute ('मार्ग') प्राप्त करता हूं; 'मुझे ऑब्जेक्ट (स्लिम \ रूट) मिलता है, लेकिन जब मैं' $ रूटनाम करता हूं = $ रूट-> getName(); 'मैं शून्य हो जाता हूं। किसी के पास कोई सुझाव है? –
क्या आपने 'setName()' विधि के माध्यम से मार्ग का नाम दिया था? (https://www.slimframework.com/docs/objects/router.html#route-names) –
Thx @Wessel। मार्ग घोषित करने के बाद समस्या 'लापता') 'विधि गायब थी। –