2013-10-09 12 views
22

करने के लिए Laravel 4 documentation.लार्वेल 4 में व्यू संगीतकार और निर्माता के बीच अंतर?

संगीतकार अनुसार है:

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

View::composer('profile', function($view) 
{ 
    $view->with('count', User::count()); 
}); 

और

प्रजापति है:

देखें रचनाकारों लगभग ठीक दृश्य संगीतकारों की तरह काम करते हैं; हालांकि, दृश्य तत्काल होने पर तुरंत निकाल दिया जाता है। एक दृश्य के निर्माता, सरल उपयोग निर्माता विधि रजिस्टर करने के लिए

View::creator('profile', function($view) 
{ 
    $view->with('count', User::count()); 
}); 

तो सवाल यह है: क्या अंतर है?

उत्तर

46

जब आप View::creator का उपयोग करते हैं तो आपके पास नियंत्रक में दृश्य के चर को ओवरराइड करने का मौका होता है। इस तरह:

View::creator('layout', function($view) { 
    $view->with('foo', 'bar'); 
}); 

// in controller 
return View::make('layout')->with('foo', 'not bar at all'); 

// it's defined as 'not bar at all' in the view 

-

View::composer('hello', function($view) { 
    $view->with('foo', 'bar'); 
}); 

// in controller 
return View::make('hello')->with('foo', 'not bar at all'); 

// it's defined as 'bar' in the view 
+1

यह एक अच्छा जवाब है क्योंकि यह एक ठोस उदाहरण प्रदान करता है। धन्यवाद! –

+1

यह जानना अच्छा है कि यह क्यों मायने रखता है। धन्यवाद +1 – isimmons

+0

यह उत्तर समझ में आता है – Hafiz

16

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

लैरवेल चक्र में कई बिंदुएं शामिल हैं।

आप View::make() का उपयोग करके एक दृश्य बना सकते हैं। यह तब होता है जब एक दृश्य तत्काल होता है - और View::make() कमांड के बाद किसी भी View::creators() को फ़ंक्शन वापस करने से पहले कॉल किया जाता है।

आम तौर पर आप केवल return View::make() चलाते हैं - जिसका अर्थ है कि दृश्य 'बनाया गया' है, और उसके बाद लार्वेल कोर पर लौटाया जाता है जहां इसे स्क्रीन पर 'रचित' किया जाता है। यह तब होता है जब View::composer() कहा जाता है (यानी दृश्य लौटने के बाद)।

मुझे यकीन नहीं है कि आप एक या दूसरे का उपयोग क्यों करना चाहते हैं, लेकिन यह दोनों के बीच का अंतर बताता है।

+2

तुम क्यों रचनाकारों जोड़ा गया था जानने के लिए उत्सुक हैं, तो (मूल रूप से सिर्फ संगीतकारों थे), [laravel/ढांचे अंक # 1822] को देखने के (https://github.com/laravel/framework/issues/1822) –

+0

@PhpMyCoder आप कमाल हैं! धन्यवाद! –

3

एक और अंतर यह है कि एक अपवाद वापस बुलबुला एक ViewCreator भीतर फेंक दिया नियंत्रक करने के लिए नहीं है। यह प्राधिकरणों के लिए आसान है। व्यूक्रिएटर में आप अनुमति डेटा प्राप्त कर सकते हैं, फिर यदि उपयोगकर्ता उस पृष्ठ के लिए अधिकृत नहीं है, तो अपवाद फेंक दें और नियंत्रक को इसे संभालने दें। उदाहरण के लिए:

class MyController { 
    public function MyAction { 
     try { 
      return view('my_view'); 
     } catch (\Exception $e) { 
      echo "<h1>Exception</h1>"; 
      echo $e->getMessage(); 
     } 
    } 
} 

class MyViewCreator { 
    public function create(View $view) { 
     $loggedInUser = User::with('permissions')->find(Auth::user()->id); 
     if (! $loggedInUser->hasPermission('MY_PERMISSION')) { 
      throw new \Exception("You are not authorized"); 
     } 
     ... 
    } 
} 
संबंधित मुद्दे