php - हरण - संस्कृति का उपसर्ग




एक ही मार्ग समूह के साथ एकाधिक उपसर्ग (6)

im एक स्कूल के लिए एक काफी सरल वेबसाइट लिख रहा है ... इस वेबसाइट के समाचार, लेख, वीडियो क्लिप ... आदि है

जिस तरह से यह काम करता है वह होम पेज में हम आगंतुक को कुछ सबक के साथ प्रस्तुत करते हैं जैसे

>math 
>geography 
>chemistry 

उपयोगकर्ता इन पर 1 का चयन करता है और उपयोगकर्ता चयन के आधार पर वेबसाइट की सामग्री में बदलाव करता है

उदाहरण के लिए यदि उपयोगकर्ता गणित का चयन करता है तो वह समाचार, आलेख, गणित के बारे में वीडियो और इसी तरह देखेंगे ... अभी यह है कि मैं क्या कर रहा हूं (वाक्यविन्यास त्रुटियों की अनदेखी करना)

Route::group(['prefix'=>'math'], function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
});

Route::group(['prefix'=>'geography'], function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
});

Route::group(['prefix'=>'chemistry'], function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
});

मूल रूप से प्रत्येक उपसर्ग के लिए सभी लिंक दोहराते हैं .... लेकिन जैसे ही लिंक बढ़ते हैं, यह अधिक से अधिक असुविधाजनक हो जाएगा ... क्या ऐसा करने का कोई बेहतर तरीका है? कुछ इस तरह

Route::group(['prefix'=>['chemistry','math' , 'geography' ], function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
});

------------------------- अद्यतन करें -------------

मैंने यह कोशिश की है

$myroutes =  function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
};

Route::group(['prefix' => 'chemistry'], $myroutes);
Route::group(['prefix' => 'math'], $myroutes);
Route::group(['prefix' => 'geography'], $myroutes);

और यह ठीक काम करता है, समस्या अंतिम उपसर्ग सभी आंतरिक लिंक से जुड़ी होती है

उदाहरण के लिए अगर मैं गणित पर क्लिक करता हूँ

मेरे लिंक हो जाएगा

site.com/math/news

लेकिन लोड किए गए पृष्ठ पर सभी लिंक्स जैसे जैसे

<a href="{{route('article_index')"> link to article </a>

हमशक्ल

site.com/geography/article

मूल रूप से लिंक वर्तमान में चयनित एक की परवाह किए बिना अंतिम उल्लेखित उपसर्ग प्राप्त करें


मुझे लगता है कि यह करना बेहतर है:

Route::get('/news/{group}', '[email protected]')->name('news_index');

और फिर नियंत्रक समारोह पर बस शर्त रखो कि क्या यह भूगोल / गणित / रसायन विज्ञान / आदि है।

क्या आपको नहीं लगता?


समूह के बजाय आप मार्ग पैरामीटर का उपयोग कर सकते हैं

Route::get('/{prefix}/news', '[email protected]')->name('news_index');
Route::get('/{prefix}/article', '[email protected]')->name('article_index');

क्यूरीओटी के लिए बस मैंने लार्वेल में उपसर्ग मार्ग समूह पर वैकल्पिक पैरामीटर का प्रयास किया और यह काम किया। इसकी जांच - पड़ताल करें:

Route::group(['prefix' => '{subject?}', 'as'=> 'subject.', where' => ['subject' => 'math|english|geo']],function (){
    Route::get('news', function (){
       return 'This is the news';
    })->name('news');
});

बहुत अच्छा यकीन है कि यह आप का सपना देखा है।

ठीक है इससे पहले कि यह सही उत्तर होगा, एक छोटा मुद्दा हो सकता है कॉलिंग route('subject.news') http://example.com/news देगा इसे खुश करने के लिए, आपको वैकल्पिक पैरामीटर को route() फ़ंक्शन यानी route('subject.news','math'); उदाहरण के लिए; तो आपके पास http://example.com/math/news होगा

PS: यह Laravel 5.4.30 PHP 7.1 पर किया गया था


ऐसा क्यों नहीं है:

$subjects = [
    'chemistry', 'geography', 'math'
];

foreach ($subjects as $subject) {
    Route::prefix($subject)->group(function () {
        Route::get('news', '[email protected]')->name('news_index');
        Route::get('article', '[email protected]')->name('article_index');
    });
}

मुझे पता है कि यह एक प्राथमिक तरीका है जो इसे करना है। फिर भी आप आसानी से विषयों को जोड़ सकते हैं, यह समझने के लिए स्पष्ट और सरल है।


आप निम्न प्रयास कर सकते हैं:

$myroutes =  function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
};

Route::group(['prefix' => 'chemistry'], $myroutes);
Route::group(['prefix' => 'math'], $myroutes);
Route::group(['prefix' => 'geography'], $myroutes);

निम्न के रूप में प्रयोग करें:

 {!!URL::to('chemistry/news')!!}
 {!!URL::to('geography/news')!!}
 {!!URL::to('math/news')!!}

आप रूट समूह वाइल्डकार्ड और अपने RouteServiceProvider में पसंदीदा उपसर्ग निर्दिष्ट कर सकते हैं

routes.php

Route::group(['prefix'=>'{slug}'],function (){
 Route::get('/news', '[email protected]')->name('news_index');
 Route::get('/article', '[email protected]')->name('article_index');
});

रूट सेवा सेवा प्रदाता बूट विधि

Route::bind('slug',function ($name){
   $prefix = ["math","chemistry","geography"];
    if(!in_array($name,$prefix))
     {
        //handle wrong prefixes
        throw new \Exception("Something went wrong");
     }
 });

नामित मार्ग का उपयोग करें

{{route('news_index',['slug'=>'math'])}}