मैं Laravel 'ब्लेड टेंपलेटिंग का उपयोग करते हुए लेआउट के लिए एक चर कैसे पार करूं?


91

Laravel 4 में, मेरा नियंत्रक ब्लेड लेआउट का उपयोग करता है:

class PagesController extends BaseController {
    protected $layout = 'layouts.master';
}

मास्टर लेआउट में चर शीर्षक आउटपुट है और फिर एक दृश्य प्रदर्शित करता है:

...
<title>{{ $title }}</title>
...
@yield('content')
....

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

public function index()
{
    $this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}

यह केवल $titleचर को दृश्य के सामग्री अनुभाग में पास करेगा । मैं उस चर को पूरे दृश्य में या बहुत कम मास्टर लेआउट में कैसे प्रदान कर सकता हूं?

जवाबों:


217

यदि आप @extendsअपने सामग्री लेआउट में उपयोग कर रहे हैं तो आप इसका उपयोग कर सकते हैं:

@extends('master', ['title' => $title])

1
मुझे इसे खोजने के लिए बहुत सारे googling लगे! यह सिर्फ यह वाक्यविन्यास है कि आपको पूर्णता प्राप्त हुई और डॉक्स इन सभी सूक्ष्मताओं को नहीं दिखाते हैं। मेरा मतलब यह है कि आधिकारिक डॉक्स का कहना है @component('alert', ['foo' => 'bar'])......
आर्थर तरासोव

मैं यह कर रहा हूं और मुझे लेआउट पृष्ठ पर एक अपरिभाषित त्रुटि मिल रही है। कोई विचार?
लुसी टर्टल

45

भविष्य में Google के लिए जो Laravel 5 का उपयोग करते हैं, अब आप इसे भी शामिल कर सकते हैं,

@include('views.otherView', ['variable' => 1])

यह वही है जो आखिरकार लार्वा पर एक घटक आधारित अनुप्रयोग बनाने के लिए देख रहा है, धन्यवाद!
रॉन माइकल

यदि मैं केवल ["एक"] पास करता हूं, तो मैं इसे टेम्पलेट में कैसे प्राप्त करूं?
जेवियर जे सोलिस फ्लोर्स

20

मैं अपनी नियंत्रक विधि में इसे जोड़कर उस समस्या को हल करने में सक्षम था:

    $title = 'My Title Here';
    View::share('title', $title);

$ यह-> लेआउट-> शीर्षक = 'होम पेज'; काम भी नहीं किया।


इसने मेरे लिए लार्वा 5.1 में काम किया। समस्या को हल करने का सबसे आसान तरीका।
संहिताचक्र

16

ब्लेड टेम्पलेट में: इस तरह एक चर को परिभाषित करें

@extends('app',['title' => 'Your Title Goes Here'])
@section('content')

और app.blade.php या अपनी पसंद के किसी भी अन्य में (मैं सिर्फ डिफ़ॉल्ट Laravel 5 सेटअप का अनुसरण कर रहा हूं)

<title>{{ $title or 'Default title Information if not set explicitly' }}</title>

यह मेरा पहला उत्तर है। आशा है कि यह काम करता है। अच्छा भाग्य!


इसने मुझे कुछ घंटे बचाने में मदद की ..! लारवेल 5.4 में इसका इस्तेमाल किया और यह बहुत अच्छा काम करता है .. जवाब के लिए धन्यवाद ...
सयान प्रिंस

2
मुझे करना था:{{ $title ?? 'Default Title' }}
डेमियन to सील्लाइग

5

हल करने का सबसे सरल तरीका:

view()->share('title', 'My Title Here');

या दृश्य का उपयोग करके:

use View;

...

View::share('title', 'My Title Here');

क्या मैं इसे रूट मिडलवेयर में निष्पादित कर सकता हूं?
मुकुट

4

ऐसा प्रतीत होता है जैसे मैं लेआउट ऑब्जेक्ट पर विशेषताओं का उपयोग करके चर को पूरे लेआउट में पास कर सकता हूं, उदाहरण के लिए मेरी समस्या को हल करने के लिए मैं निम्नलिखित करने में सक्षम था:

$this->layout->title = 'Home page';

8
यह मेरे लिए काम नहीं किया। मुझे वर्तमान में यह बताते हुए एक त्रुटि मिलती है कि यह एक चर के रूप में मौजूद नहीं है।
एडम लिबोनत्ती-रोशे

मुझे लेआउट ऑब्जेक्ट कहां मिल सकता है?
येवगेनी अफनसेव

1
class PagesController extends BaseController {
    protected $layout = 'layouts.master';

    public function index()
    {
        $this->layout->title = "Home page";
        $this->layout->content = View::make('pages/index');
    }
}

ब्लेड टेम्पलेट फ़ाइल में, चर के सामने @ का उपयोग करने के लिए रिमेंबर।

...
<title>{{ $title or '' }}</title>
...
@yield('content')
...

@YevgeniyAfanasyev, यह सवाल आपको पोस्ट मालिक से पूछना चाहिए। मैं सिर्फ उनकी कोडिंग का संदर्भ देता हूं। अजीब का प्रकार तुम वापस मुझसे पूछते हैं .... और यह 2014 के पाठ्यक्रम मैं संस्करण वह पूछ रहा है, जिस पर बात कर रहे थे की में उत्तर दिया गया Laravel 4. है
Shiro

0

तुम कोशिश कर सकते हो:

public function index()
{
    return View::make('pages/index', array('title' => 'Home page'));
}

0

बस इस सरल विधि का प्रयास करें: नियंत्रक में: -

 public function index()
   {
        $data = array(
            'title' => 'Home',
            'otherData' => 'Data Here'
        );
        return view('front.landing')->with($data);
   }

और आप लेआउट (app.blade.php) में:

<title>{{ $title }} - {{ config('app.name') }} </title>

बस इतना ही।


क्या आप बता सकते हैं कि यह समस्या को कैसे हल करता है? और पिछले (विशेष रूप से स्वीकृत) उत्तरों के ऊपर और इसमें क्या नया योगदान देता है?
gst

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

0

यदि आप वर्गों के वैरिएबल प्राप्त करना चाहते हैं तो आप इस तरह भुगतान कर सकते हैं:

$_view      = new \View;
$_sections  = $_view->getFacadeRoot()->getSections();
dd($_sections);
/*
Out:
array:1 [▼
  "title" => "Painel"
]
*/

-2
$data['title'] = $this->layout->title = 'The Home Page';
$this->layout->content = View::make('home', $data);

मैंने ऐसा अब तक किया है क्योंकि मुझे व्यू और मास्टर फाइल दोनों में जरूरत थी। ऐसा लगता है कि यदि आप $ इस का उपयोग नहीं करते हैं-> लेआउट-> शीर्षक यह मास्टर लेआउट में उपलब्ध नहीं होगा। सुधारों का स्वागत है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.