मार्ग

डिफ़ॉल्ट मार्ग नियम

webman का डिफ़ॉल्ट मार्ग नियम है http://127.0.0.1:8787/{नियंत्रक}/{क्रिया}

डिफ़ॉल्ट नियंत्रणर हैapp\controller\IndexController, डिफ़ॉल्ट क्रिया हैindex

उदाहरण के लिए पहुंच:

  • http://127.0.0.1:8787 डिफ़ॉल्ट रूप से app\controller\IndexController वर्ग की index विधि को पहुंचाएगा
  • http://127.0.0.1:8787/foo डिफ़ॉल्ट रूप से app\controller\FooController वर्ग की index विधि को पहुंचाएगा
  • http://127.0.0.1:8787/foo/test डिफ़ॉल्ट रूप से app\controller\FooController वर्ग की test विधि को पहुंचाएगा
  • http://127.0.0.1:8787/admin/foo/test डिफ़ॉल्ट रूप से app\admin\controller\FooController वर्ग की test विधि को पहुंचाएगा (संदर्भ देखें एकाधिक अनुप्रयोग)

इसके अलावा webman 1.4 से अधिक जटिल डिफ़ॉल्ट मार्गों का समर्थन करता है, उदाहरण के लिए

app
├── admin
│   └── v1
│       └── v2
│           └── v3
│               └── controller
│                   └── IndexController.php
└── controller
    ├── v1
    │   └── IndexController.php
    └── v2
        └── v3
            └── IndexController.php

जब आप किसी अनुरोध के मार्ग को बदलना चाहते हैं, तो कृपया कॉन्फ़िगरेशन फ़ाइल config/route.php को परिवर्तित करें।

यदि आप डिफ़ॉल्ट मार्ग को बंद करना चाहते हैं, तो कॉन्फ़िगरेशन फ़ाइल config/route.php के अंतिम पंक्ति में निम्नलिखित कॉन्फ़िगरेशन जोड़ें:

Route::disableDefaultRoute();

क्लोजर मार्ग

config/route.php में निम्नलिखित मार्ग कोड जोड़ें

use support\Request;
Route::any('/test', function (Request $request) {
    return response('test');
});

ध्यान दें
चूंकि क्लोजर फ़ंक्शन किसी भी नियंत्रक का हिस्सा नहीं है, इसलिए $request->app $request->controller $request->action सभी खाली स्ट्रिंग हैं।

जब पहुंच पता http://127.0.0.1:8787/test होता है, तो test स्ट्रिंग लौटाई जाएगी।

ध्यान दें
मार्ग पथ को / से शुरू होना चाहिए, उदाहरण के लिए

use support\Request;
// गलत उपयोग
Route::any('test', function (Request $request) {
    return response('test');
});

// सही उपयोग
Route::any('/test', function (Request $request) {
    return response('test');
});

क्लास मार्ग

config/route.php में निम्नलिखित मार्ग कोड जोड़ें

Route::any('/testclass', [app\controller\IndexController::class, 'test']);

जब पहुंच पता http://127.0.0.1:8787/testclass होता है, तो app\controller\IndexController वर्ग की test विधि के लौटने का मान लौटाया जाएगा।

मार्ग पैरामीटर

यदि मार्ग में पैरामीटर हैं, तो उसे {key} के माध्यम से मिलाया जाएगा, मिलान परिणाम संबंधित नियंत्रक विधि के पैरामीटर में भेजा जाएगा (दूसरे पैरामीटर से शुरू करके क्रम में भेजा जाएगा), उदाहरण के लिए:

// मिलाना /user/123 /user/abc
Route::any('/user/{id}', [app\controller\UserController::class, 'get']);
namespace app\controller;
use support\Request;

class UserController
{
    public function get(Request $request, $id)
    {
        return response('प्राप्त पैरामीटर'.$id);
    }
}

अधिक उदाहरण:

use support\Request;
// मिलाना /user/123, न मिलाना /user/abc
Route::any('/user/{id:\d+}', function (Request $request, $id) {
    return response($id);
});

// मिलाना /user/foobar, न मिलाना /user/foo/bar
Route::any('/user/{name}', function (Request $request, $name) {
   return response($name);
});

// मिलाना /user /user/123 और /user/abc   [] का अर्थ है वैकल्पिक
Route::any('/user[/{name}]', function (Request $request, $name = null) {
   return response($name ?? 'tom');
});

// किसी भी अनुरोध को /user/ के प्रीफिक्स के रूप में मिलाना
Route::any('/user/[{path:.+}]', function (Request $request) {
    return $request->path();
});

// सभी विकल्प अनुरोधों का मिलाना   : के बाद नियमित अभिव्यक्ति निर्धारित करें, जिसका अर्थ है इस नामित पैरामीटर का नियमित नियम
Route::options('[{path:.+}]', function () {
    return response('');
});

उन्नत उपयोग का सारांश

[] व्याकरण Webman मार्ग में मुख्य रूप से वैकल्पिक पथ भागों को संभालने या गतिशील मार्गों का मिलान करने के लिए उपयोग किया जाता है, यह आपको मार्गों के लिए अधिक जटिल पथ संरचनाओं और मेल नियमों को परिभाषित करने की अनुमति देता है

: का उपयोग नियमित अभिव्यक्ति को निर्दिष्ट करने के लिए होता है

मार्ग समूह

कभी-कभी जब मार्ग में समान पूर्वापेक्षाओं की मात्रा होती है, तो हम मार्ग समूह का उपयोग करके परिभाषा को सरल बना सकते हैं। उदाहरण के लिए:

Route::group('/blog', function () {
   Route::any('/create', function (Request $request) {return response('create');});
   Route::any('/edit', function (Request $request) {return response('edit');});
   Route::any('/view/{id}', function (Request $request, $id) {return response("view $id");});
});

के बराबर है

Route::any('/blog/create', function (Request $request) {return response('create');});
Route::any('/blog/edit', function (Request $request) {return response('edit');});
Route::any('/blog/view/{id}', function (Request $request, $id) {return response("view $id");});

ग्रुप का घातक उपयोग

Route::group('/blog', function () {
   Route::group('/v1', function () {
      Route::any('/create', function (Request $request) {return response('create');});
      Route::any('/edit', function (Request $request) {return response('edit');});
      Route::any('/view/{id}', function (Request $request, $id) {return response("view $id");});
   });  
});

मार्ग मध्यवर्ती

हम किसी एक या किसी समूह के मार्ग के लिए मध्यवर्ती सेट कर सकते हैं।
उदाहरण के लिए:

Route::any('/admin', [app\admin\controller\IndexController::class, 'index'])->middleware([
    app\middleware\MiddlewareA::class,
    app\middleware\MiddlewareB::class,
]);

Route::group('/blog', function () {
   Route::any('/create', function () {return response('create');});
   Route::any('/edit', function () {return response('edit');});
   Route::any('/view/{id}', function ($request, $id) {response("view $id");});
})->middleware([
    app\middleware\MiddlewareA::class,
    app\middleware\MiddlewareB::class,
]);
# गलत उपयोग उदाहरण (webman-framework >= 1.5.7 पर इस उपयोग का प्रभावी होता है)
Route::group('/blog', function () {
   Route::group('/v1', function () {
      Route::any('/create', function (Request $request) {return response('create');});
      Route::any('/edit', function (Request $request) {return response('edit');});
      Route::any('/view/{id}', function (Request $request, $id) {return response("view $id");});
   });  
})->middleware([
    app\middleware\MiddlewareA::class,
    app\middleware\MiddlewareB::class,
]);
# सही उपयोग उदाहरण
Route::group('/blog', function () {
   Route::group('/v1', function () {
      Route::any('/create', function (Request $request) {return response('create');});
      Route::any('/edit', function (Request $request) {return response('edit');});
      Route::any('/view/{id}', function (Request $request, $id) {return response("view $id");});
   })->middleware([
        app\middleware\MiddlewareA::class,
        app\middleware\MiddlewareB::class,
    ]);  
});

संसाधन मार्ग

Route::resource('/test', app\controller\IndexController::class);

//निर्धारित संसाधन मार्ग
Route::resource('/test', app\controller\IndexController::class, ['index','create']);

//गैर-परिभाषित संसाधन मार्ग
// जैसे notify पहुंच पता तो वह any प्रकार का मार्ग /test/notify या /test/notify/{id} दोनों ही हो सकता है routeName होता है test.notify
Route::resource('/test', app\controller\IndexController::class, ['index','create','notify']);
क्रिया URI क्रिया मार्ग नाम
GET /test index test.index
GET /test/create create test.create
POST /test store test.store
GET /test/{id} show test.show
GET /test/{id}/edit edit test.edit
PUT /test/{id} update test.update
DELETE /test/{id} destroy test.destroy
PUT /test/{id}/recovery recovery test.recovery

यूआरएल उत्पन्न करना

ध्यान दें
वर्तमान में समूह घातक मार्ग उत्पन्न करने की यूआरएल का समर्थन नहीं करता है

उदाहरण के लिए मार्ग:

Route::any('/blog/{id}', [app\controller\BlogController::class, 'view'])->name('blog.view');

हम निम्नलिखित विधि का उपयोग करके इस मार्ग का यूआरएल उत्पन्न कर सकते हैं।

route('blog.view', ['id' => 100]); // परिणाम होगा /blog/100

दृश्य में मार्ग के यूआरएल का उपयोग करते समय आप इस विधि का उपयोग कर सकते हैं, इस प्रकार मार्ग नियम के अनुसार किसी भी परिवर्तन के बावजूद, यूआरएल स्वतः उत्पन्न होगा, जिससे दृश्य फ़ाइलों को परिवर्तित करने के मामले में बड़ी संख्या में परिवर्तन से बचा जा सके।

मार्ग जानकारी प्राप्त करना

$request->route वस्तु के माध्यम से हम वर्तमान अनुरोध मार्ग जानकारी प्राप्त कर सकते हैं, उदाहरण के लिए

$route = $request->route; // समानार्थक है $route = request()->route;
if ($route) {
    var_export($route->getPath());
    var_export($route->getMethods());
    var_export($route->getName());
    var_export($route->getMiddleware());
    var_export($route->getCallback());
    var_export($route->param());
}

ध्यान दें
यदि वर्तमान अनुरोध ने config/route.php में निर्धारित किसी भी मार्ग से मेल नहीं खाया, तो $request->route null होगा, अर्थात् डिफ़ॉल्ट मार्ग का पालन करते समय $request->route null होगा

404 हैंडलिंग

जब मार्ग नहीं मिलते हैं तो डिफ़ॉल्ट रूप से 404 स्थिति कोड लौटता है और 404 संबंधित सामग्री को आउटपुट करता है।

यदि विकासक ने मार्ग न मिलने पर व्यावसायिक प्रक्रिया में हस्तक्षेप करना चाहा, तो वह webman द्वारा प्रदान किए गए फॉलबैक मार्ग Route::fallback($callback) का उपयोग कर सकते हैं। जैसे नीचे दिए गए कोड लॉजिक में मार्ग न मिलने पर मुख्य पृष्ठ पर पुनर्निर्देशित किया जाता है।

Route::fallback(function(){
    return redirect('/');
});

उदाहरण के लिए जब मार्ग अस्तित्व में नहीं है तो एक json डेटा लौटाने के लिए, यह webman के रूप में API इंटरफेस के समय बहुत उपयोगी है।

Route::fallback(function(){
    return json(['code' => 404, 'msg' => '404 not found']);
});

404 पर मध्यवर्ती जोड़ना

डिफ़ॉल्ट 404 अनुरोध किसी भी मध्यवर्ती से नहीं गुजरते हैं। यदि आपको 404 अनुरोध पर मध्यवर्ती जोड़ने की आवश्यकता है, तो कृपया निम्नलिखित कोड देखें।

Route::fallback(function(){
    return json(['code' => 404, 'msg' => '404 not found']);
})->middleware([
    app\middleware\MiddlewareA::class,
    app\middleware\MiddlewareB::class,
]);

संबंधित लिंक निजीकृत 404 500 पृष्ठ

डिफ़ॉल्ट मार्ग बंद करें

// मुख्य परियोजना डिफ़ॉल्ट मार्ग को बंद करें, अनुप्रयोग प्लगइन्स को प्रभावित नहीं करता है
Route::disableDefaultRoute();
// मुख्य परियोजना की admin अनुप्रयोग के मार्ग को बंद करें, अनुप्रयोग प्लगइन्स को प्रभावित नहीं करता है
Route::disableDefaultRoute('', 'admin');
// foo प्लगइन के डिफ़ॉल्ट मार्ग को बंद करें, मुख्य परियोजना को प्रभावित नहीं करता है
Route::disableDefaultRoute('foo');
// foo प्लगइन के admin अनुप्रयोग के डिफ़ॉल्ट मार्ग को बंद करें, मुख्य परियोजना को प्रभावित नहीं करता है
Route::disableDefaultRoute('foo', 'admin');
// नियंत्रणर [\app\controller\IndexController::class, 'index'] के डिफ़ॉल्ट मार्ग को बंद करें
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);

एनोटेशन द्वारा डिफ़ॉल्ट मार्ग बंद करना

हम किसी नियंत्रणर के डिफ़ॉल्ट मार्ग को एनोटेशन के माध्यम से बंद कर सकते हैं, उदाहरण के लिए:

namespace app\controller;
use support\annotation\DisableDefaultRoute;

#[DisableDefaultRoute]
class IndexController
{
    public function index()
    {
        return 'index';
    }
}

इसी प्रकार, हम किसी नियंत्रणर के डिफ़ॉल्ट मार्ग को एनोटेशन के माध्यम से बंद कर सकते हैं, उदाहरण के लिए:

namespace app\controller;
use support\annotation\DisableDefaultRoute;

class IndexController
{
    #[DisableDefaultRoute]
    public function index()
    {
        return 'index';
    }
}

मार्ग इंटरफेस

// $uri के किसी भी विधि अनुरोध के मार्ग को सेट करें
Route::any($uri, $callback);
// $uri के GET अनुरोध के मार्ग को सेट करें
Route::get($uri, $callback);
// $uri के POST अनुरोध के मार्ग को सेट करें
Route::post($uri, $callback);
// $uri के PUT अनुरोध के मार्ग को सेट करें
Route::put($uri, $callback);
// $uri के PATCH अनुरोध के मार्ग को सेट करें
Route::patch($uri, $callback);
// $uri के DELETE अनुरोध के मार्ग को सेट करें
Route::delete($uri, $callback);
// $uri के HEAD अनुरोध के मार्ग को सेट करें
Route::head($uri, $callback);
// $uri के OPTIONS अनुरोध के मार्ग को सेट करें
Route::options($uri, $callback);
// विभिन्न प्रकार के अनुरोध प्रकारों के मार्ग को एक साथ सेट करें
Route::add(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'], $uri, $callback);
// समूह मार्ग
Route::group($path, $callback);
// संसाधन मार्ग
Route::resource($path, $callback, [$options]);
// मार्ग बंद करना
Route::disableDefaultRoute($plugin = '');
// फॉलबैक मार्ग, डिफ़ॉल्ट मार्ग को सेट करना
Route::fallback($callback, $plugin = '');
// सभी मार्ग जानकारी प्राप्त करें
Route::getRoutes();

यदि uri का कोई संबंधित मार्ग नहीं है (डिफ़ॉल्ट मार्ग सहित), और फॉलबैक मार्ग भी सेट नहीं है, तो 404 लौटाएगा।

कई मार्ग कॉन्फ़िगरेशन फ़ाइलें

यदि आप मार्गों के प्रबंधन के लिए कई मार्ग कॉन्फ़िगरेशन फ़ाइलों का उपयोग करना चाहते हैं, जैसे एकाधिक अनुप्रयोग में प्रत्येक अनुप्रयोग के नीचे अपनी खुद की मार्ग कॉन्फ़िगरेशन होती है, तो आप बाहरी फ़ाइलों के लिए require का उपयोग करके बाहरी मार्ग कॉन्फ़िगरेशन फ़ाइलें लोड कर सकते हैं।
उदाहरण स्वरूप config/route.php में

<?php

// admin अनुप्रयोग के नीचे के मार्ग कॉन्फ़िगरेशन को लोड करना
require_once app_path('admin/config/route.php');
// api अनुप्रयोग के नीचे के मार्ग कॉन्फ़िगरेशन को लोड करना
require_once app_path('api/config/route.php');