2013-06-05 15 views
23

मैं लैरवेल 4 दस्तावेज के माध्यम से पढ़ रहा हूं और सीखने में मदद के लिए डेमो एप्लीकेशन बना रहा हूं।लैरवेल 4 कंट्रोलर टेम्पलेटिंग/ब्लेड - सही तरीका?

मुझे ब्लेड और नियंत्रकों के साथ विचारों के टेम्पलेटिंग पर अधिक दस्तावेज नहीं मिल सका। सही विधि कौन सा है या क्या यह व्यक्तिगत वरीयता पर आती है?

E.g. 1

नियंत्रकों/HomeController.php

protected $layout = 'layouts.main'; 

public function showWelcome() 
{ 
    $this->layout->title = "Page Title"; 
    $this->layout->content = View::make('welcome'); 
} 

दृश्य/लेआउट/main.blade.php

<html> 
<head> 
    <title>{{ $title }}</title> 
</head> 
<body> 
    {{ $content }} 
</body> 
</html> 

दृश्य/welcome.blade.php

<p>Welcome.</p> 

E.g. 2

नियंत्रकों/HomeController.php

protected $layout = 'layouts.main'; 

public function showWelcome() 
{ 
    $this->layout->content = View::make('welcome'); 
} 

दृश्य/लेआउट/main.blade.php

<html> 
<head> 
    <title>@yield('title')</title> 
</head> 
<body> 
    @yield('content') 
</body> 
</html> 

दृश्य/welcome.blade.php

@section('title', 'Welcome') 
@section('content') 
// content 
@stop 

उपरोक्त के सर्वोत्तम सम्मेलन और/या फायदे क्या हैं?

+0

कृपया उपरोक्त उदाहरणों या सही तरीके से नहीं, तो कृपया मुझे सही करें! – Mediabeastnz

उत्तर

0

मैं दूसरे को prefere, क्योंकि यह आपके दृश्य और नियंत्रक कोड के बीच एक और स्पष्ट अलगाव दिखाता है। यह मेरे लिए अधिक तार्किक लगता है कि प्रत्येक बार आपके स्वागत शीर्षक के साथ आपका स्वागत दृश्य जोड़ने के बजाय शीर्षक सामग्री दृश्य की एक संपत्ति होगी।

अंत में दोनों सही हैं और काम करेंगे, लेकिन दूसरा विकल्प अधिक रखरखाव योग्य है।

+0

मैं सहमत हूं, यही वह है जिसे मैंने उपयोग करना जारी रखा है, लेकिन मैंने सोचा कि यह सवाल यहां अच्छा लगा सकता है ... धन्यवाद। – Mediabeastnz

0

मैं पहली विधि पसंद करता हूं क्योंकि कुछ साइटों के डेटाबेस से गतिशील रूप से जेनरेट किया गया शीर्षक होता है। पहली विधि का उपयोग करने में शीर्षक को पार करना आसान है।

+0

यह सच है कि अधिकांश सामग्री शायद डेटाबेस से आती है, लेकिन मुझे लगता है कि आपको परिणामी एलोक्वेंट मॉडल को देखने के लिए पास करना चाहिए और अपने नियंत्रक में शीर्षक को स्क्रैप करने के बजाय वहां शीर्षक सेट करना चाहिए। आप अभी भी सामग्री के लिए मॉडल पास करेंगे या सामग्री को भी सेट करेंगे (साथ ही साथ कोई अन्य संपत्ति)। – Aloys

+0

क्या आप इसका उदाहरण दे सकते हैं कि आपका क्या मतलब है? – thestepafter

+0

यह वही है जो मैं प्रस्तावित करता हूं (अभी भी आईओसी का उपयोग कर सट्टेबाजी कर सकता है, लेकिन यह अब के लिए महत्वपूर्ण नहीं है): http://paste.laravel.com/vre – Aloys

1

मुझे इनमें से कोई भी पसंद नहीं है। लेआउट शायद लार्वेल का अजीब हिस्सा हैं। नियंत्रक संस्करण वास्तव में समझ में नहीं आता है; नियंत्रक के सभी तरीकों के बाद उस दृश्य की आवश्यकता होती है। @yield संस्करण बॉयलरप्लेट की गड़बड़ है।

public function index() 
{ 
    return View::make('layouts.main', [ 
     'layout_data' => 'sup' 
    ])->nest('content', 'welcome', [ 
     'view_data' => 'sup' 
    ]); 
} 

मुझे लगता है कि यह डॉक्स में उल्लेख किया जाना चाहिए कि इस एक विकल्प है: मैं इस "विधि विशिष्ट लेआउट" बना हुआ है।

4

मैं नियंत्रक में किसी भी लेआउट जानकारी एकत्र नहीं करते, मैं के माध्यम से

@extends('layouts.master') 

ध्यान में रखते हुए यह स्टोर जब मैं एक दृश्य के वापस जाने के लिए नियंत्रक मैं उपयोग में की जरूरत है:

return \View::make('examples.foo')->with('foo', $bar); 

मैं इस दृष्टिकोण को पसंद करता हूं क्योंकि दृश्य निर्धारित करता है कि किस लेआउट का उपयोग करना है और नियंत्रक नहीं - जो फिर से फैक्टरिंग के अधीन है।

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