2013-08-12 15 views
6

पर रूट मैं लारवेल 4 के लिए कम या कम नया हूं। मैंने पहले कभी भी मार्गों का उपयोग नहीं किया है, लेकिन आम तौर पर जो मैं यूआरएल/कंट्रोलर/एक्शन और बैकएंड रूटिंग के लिए उपयोग किया जाता हूं मेरे लिए। मैंने कुछ बार रूट्स और नियंत्रकों के लिए प्रलेखन पढ़ा है और कुछ ट्यूटोरियल्स के माध्यम से पढ़ा है और इसलिए, मैं यह समझने की कोशिश कर रहा हूं कि प्रत्येक नियंत्रक और कार्रवाई के लिए मार्ग लिखने के बिना इसे कैसे काम किया जाए।लैरवेल 4: स्थानीयहोस्ट/नियंत्रक/कार्रवाई

मैं तो अब

Route::get('{controller}/{action}', function($controller, $action = 'index'){ 
    return $controller."@".$action; 
}); 

की तरह कुछ करने की कोशिश की, मैं जानता हूँ कि यह गलत है क्योंकि यह काम नहीं करता है, लेकिन मैं क्या याद आ रही है?

Route::get('/controller/action' , '[email protected]'); 

कौन मूर्ख और मेरे पास समय की बर्बादी की तरह लगता है: सबसे ट्यूटोरियल और सामान पर मैं की तरह कम या ज्यादा हर नियंत्रक और कार्रवाई के लिए एक मार्ग दिखाई दे रही है।

क्या मैं चाहता हूं कि हासिल करने के लिए वैसे भी है?

+1

यह मूर्खतापूर्ण नहीं है और समय की बर्बादी। आपकी परिभाषा बढ़ने के साथ ही रूट परिभाषा कार्यक्षमता और सुविधाओं की बहुत सारी सुविधाएं प्रदान करती है। अधिक जानकारी के लिए इस ब्लॉग को पढ़ें: http://philsturgeon.co.uk/blog/2013/07/beware-the-route-to-evil – Laurence

उत्तर

7

आप देख रहे हैं एक अधिक स्वचालित मार्ग के लिए, इस Laravel 4 तरीका होगा:

रूट:

Route::controller('users', 'UsersController'); 

नियंत्रक (इस मामले में UsersController.php):

public function getIndex() 
{ 
    // routed from GET request to /users 
} 

public function getProfile() 
{ 
    // routed from GET request to /users/profile 
} 

public function postProfile() 
{ 
    // routed from POST request to /users/profile 
} 

public function getPosts($id) 
{ 
    // routed from GET request to: /users/posts/42 
} 

जैसा कि शिफ्ट एक्सचेंज का उल्लेख है, इसे वर्बोज़ तरीके से करने के कुछ फायदे हैं।

Route::get("users", array(
    "as"=>"dashboard", 
    "uses"=>"[email protected]" 
)); 

फिर जब अपने आवेदन में यूआरएल का निर्माण, एक सहायक का उपयोग उत्पन्न करने के लिए एक link to a named route: उत्कृष्ट लेख वह जुड़ा हुआ के अलावा, आप एक name for each route उदाहरण के लिए बना सकते हैं,

$url = URL::route('dashboard'); 

लिंक हैं तो भविष्य में नियंत्रकों/कार्यों में परिवर्तन से प्रमाणित।

आप सीधे उन कार्यों के लिए लिंक भी उत्पन्न कर सकते हैं जो स्वचालित रूटिंग के साथ काम करेंगे।

$url = URL::action('[email protected]'); 
6
app\ 
    controllers\ 
     Admin\ 
      AdminController.php 
     IndexController.php 
Route::get('/admin/{controller?}/{action?}', function($controller='Index', $action='index'){ 
     $controller = ucfirst($controller); 
     $action = $action . 'Action'; 
     return App::make("Admin\\{$controller}Controller")->$action(); 
    }); 

Route::get('/{controller?}/{action?}', function($controller='Index', $action='index'){ 
     $controller = ucfirst($controller); 
     $action = $action . 'Action'; 
     return App::make("{$controller}Controller")->$action(); 
    }); 
+1

कृपया यह बताएं कि यह उत्तर क्यों मदद करता है। –

+1

यह सभी नियंत्रकों के लिए स्वचालित रूप से नियंत्रक/कार्रवाई को रूट करने के लिए सार्वभौमिक तरीका है। इसके अलावा यह अलग फ़ोल्डर में नियंत्रकों को रखने की अनुमति देता है। – Alex

+1

आपको वास्तव में केवल शुद्ध कोड की बजाय इस पोस्ट में कुछ स्पष्टीकरण जोड़ना चाहिए। –

0

मैं नेट दुनिया और मार्ग से आते हैं आम तौर पर किया जाता है:

/{Controller}/{action}/{id} 

कौन सा लगता है:

/Products/Show/1 OR /Products/Show/Beverages 

Laravel में मैं इस मार्ग की तरह पूरा इसलिए:

Route::get('/{controller?}/{action?}/{id?}', function ($controller='Home', $action='index', $id = null) { 
    $controller = ucfirst($controller); 
    return APP::make("{$controller}Controller")->$action($id); 
}); 

नियंत्रक इसलिए की तरह मोटे तौर पर दिखेगा:

class ProductsController extends BaseController { 
    public function Show($id) { 
     $products = array(1 => array("Price" => "$600","Item" => "iPhone 6"), 
          2 => array("Price" => "$700", "Item" => "iPhone 6 Plus")); 

     if ($id == null) { 
      echo $products[1]["Item"]; 
     } else { 
      echo $products[$id]["Item"]; 
     } 

    } 
} 
संबंधित मुद्दे