खोज…
परिचय
Laravel बॉक्स से ब्लेड टेंपलेटिंग इंजन का समर्थन करता है। ब्लेड टेम्पलिंग इंजन हमें मास्टर टेम्प्लेट बनाने की अनुमति देता है और मास्टर टेम्प्लेट से बाल टेम्प्लेटिंग लोडिंग सामग्री, हम ब्लेड फ़ाइल के अंदर चर, लूप और सशर्त विवरण रख सकते हैं।
दृश्य: परिचय
दृश्य, एक MVC पैटर्न में, उपयोगकर्ता को डेटा प्रस्तुत करने के तरीके पर तर्क होता है। एक वेब एप्लिकेशन में, आमतौर पर वे HTML आउटपुट उत्पन्न करने के लिए उपयोग किए जाते हैं जो प्रत्येक प्रतिक्रिया के साथ उपयोगकर्ताओं को वापस भेजे जाते हैं। डिफ़ॉल्ट रूप से, लारवेल में resources/views
निर्देशिका में संग्रहीत किए जाते हैं।
view
सहायक फ़ंक्शन का उपयोग करके एक view
कहा जा सकता है:
view(string $path, array $data = [])
सहायक का पहला पैरामीटर दृश्य फ़ाइल का पथ है, और दूसरा पैरामीटर दृश्य को पास करने के लिए डेटा का एक वैकल्पिक सरणी है।
इसलिए, resources/views/example.php
को कॉल करने के लिए, आप उपयोग करेंगे:
view('example');
resources/views
निर्देशिका के भीतर उप-फ़ोल्डर में फ़ाइलें देखें, जैसे कि resources/views/parts/header/navigation.php
view('parts.header.navigation');
, को डॉट नोटेशन का उपयोग करके कहा जा सकता है: view('parts.header.navigation');
एक दृश्य फ़ाइल के भीतर, जैसे कि resources/views/example.php
, आप HTML और PHP दोनों को एक साथ शामिल करने के लिए स्वतंत्र हैं:
<html>
<head>
<title>Hello world!</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Your name is: <?php echo $name; ?></p>
</body>
</html>
पिछले उदाहरण में (जो किसी भी ब्लेड विशिष्ट सिंटैक्स का उपयोग नहीं करता है), हम $name
चर का उत्पादन करते हैं। इस मूल्य को अपने विचार में पास करने के लिए, हम सहायक को देखने के लिए मानों की एक सरणी को पास करेंगे:
view('example', ['name' => $name]);
या वैकल्पिक रूप से, compact()
सहायक का उपयोग करें। इस मामले में, स्ट्रिंग को कॉम्पैक्ट () के पास दिया गया है, उस चर के नाम से मेल खाता है जिसे हम दृश्य में पास करना चाहते हैं।
view('example', compact('name'));
ब्लेड वार्स के लिए नामकरण की सहमति
डेटा वापस देखने के लिए भेजते समय। आप उपयोग कर सकते हैं underscore
बहु शब्द के लिए variable
लेकिन साथ -
laravel त्रुटि देता है।
जैसे यह user-address
भीतर त्रुटि (नोटिस hyphen ( - )
view('example',['user-address' => 'Some Address']);
ऐसा करने का सही तरीका होगा
view('example', ['user_address' => 'Some Address']);
नियंत्रण संरचनाएं
ब्लेड सामान्य PHP नियंत्रण संरचनाओं के लिए सुविधाजनक सिंटैक्स प्रदान करता है।
नियंत्रण संरचनाओं में से प्रत्येक @[structure]
शुरू होता है और @[endstructure]
साथ समाप्त होता है। ध्यान दें कि टैग के भीतर, हम सामान्य HTML टाइप कर रहे हैं और ब्लेड सिंटैक्स के साथ चर भी शामिल है।
सशर्त,
'अगर' कथन
@if ($i > 10)
<p>{{ $i }} is large.</p>
@elseif ($i == 10)
<p>{{ $i }} is ten.</p>
@else
<p>{{ $i }} is small.</p>
@endif
'जब तक' बयान नहीं
('यदि नहीं' के लिए लघु वाक्य रचना।)
@unless ($user->hasName())
<p>A user has no name.</p>
@endunless
लूप्स
'घुमाव के दौरान
@while (true)
<p>I'm looping forever.</p>
@endwhile
'फॉरच' लूप
@foreach ($users as $id => $name)
<p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach
'फोर्लेसे' लूप
(समान रूप से ' @empty
' लूप के रूप में, लेकिन एक विशेष @empty
निर्देश जोड़ता है, जिसे तब निष्पादित किया जाता है, जब ऐरे एक्सप्रेशन ओवररेटेड होता है, डिफ़ॉल्ट सामग्री दिखाने के तरीके के रूप में खाली होता है।)
@forelse($posts as $post)
<p>{{ $post }} is the post content.</p>
@empty
<p>There are no posts.</p>
@endforelse
लूप के भीतर, एक विशेष $loop
वैरिएबल उपलब्ध होगा, जिसमें लूप की स्थिति के बारे में जानकारी होगी:
संपत्ति | विवरण |
---|---|
$loop->index | वर्तमान लूप पुनरावृत्ति का सूचकांक (0 से शुरू होता है)। |
$loop->iteration | वर्तमान लूप पुनरावृत्ति (1 से शुरू होता है)। |
$loop->remaining | शेष लूप पुनरावृत्तियों। |
$loop->count | सरणी में आइटम्स की कुल संख्या पुनरावृत्त की जा रही है। |
$loop->first | क्या यह लूप के माध्यम से पहला पुनरावृत्ति है। |
$loop->last | क्या यह लूप के माध्यम से अंतिम पुनरावृत्ति है। |
$loop->depth | वर्तमान लूप का घोंसला स्तर। |
$loop->parent | जब एक नेस्टेड लूप में होता है, तो माता-पिता का लूप वेरिएबल होता है। |
उदाहरण:
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
लारवेल 5.2.22 के बाद से, हम निर्देश @continue
और @break
@continue
का भी उपयोग कर सकते हैं
संपत्ति | विवरण |
---|---|
@continue | वर्तमान पुनरावृत्ति को रोकें और अगले एक को शुरू करें। |
@break | वर्तमान लूप बंद करो। |
उदाहरण :
@foreach ($users as $user)
@continue ($user->id == 2)
<p>{{ $user->id }} {{ $user->name }}</p>
@break ($user->id == 4)
@endforeach
तब ( मान लिया जाता है कि 5+ उपयोगकर्ता आईडी द्वारा सॉर्ट किए गए हैं और कोई आईडी नहीं है ) पेज रेंडर करेगा
1 Dave
3 John
4 William
PHP के भावों की गूंज
डबल घुंघराले ब्रेसिज़ के भीतर किसी भी PHP व्यंजक {{ $variable }}
हो जाएगा echo
के माध्यम से चलाया जा रहा के बाद एड e
सहायक समारोह । (तो एचटीएमएल विशेष वर्ण ( <
, >
, "
, '
, &
) सुरक्षित रूप से इसी एचटीएमएल संस्थाओं के लिए बदल दिया जाता है।) (पीएचपी अभिव्यक्ति स्ट्रिंग के लिए मूल्यांकन करना चाहिए, नहीं तो एक अपवाद फेंक दिया जाएगा।)
एक चर गूँज रहा है
{{ $variable }}
एक एरे में एक तत्व की गूंज
{{ $array["key"] }}
किसी वस्तु की संपत्ति गूँजना
{{ $object->property }}
एक फ़ंक्शन कॉल का परिणाम गूंज रहा है
{{ strtolower($variable) }}
अस्तित्व के लिए जाँच कर रहा है
सामान्य तौर पर, PHP में, यह जांचने के लिए कि क्या एक चर सेट है और इसे प्रिंट करें जो आप करेंगे
- PHP 7 से पहले
<?php echo isset($variable) ? $variable : 'Default'; ?>
- PHP 7 के बाद ("नल coalescing ऑपरेटर" का उपयोग करके)
<?php echo $variable ?? 'Default'; ?>
ब्लेड ऑपरेटर or
इसे आसान बनाता है:
{{ $variable or 'Default' }}
कच्चा इकोस
जैसा कि उल्लेख किया गया है, नियमित डबल ब्रेसेस सिंटैक्स {{ }}
, को सुरक्षा के लिए PHP के htmlspecialchars
फ़ंक्शन के माध्यम से फ़िल्टर किया जाता है (दृश्य में HTML के दुर्भावनापूर्ण इंजेक्शन को रोकते हुए)। यदि आप इस व्यवहार को बायपास करना चाहते हैं, उदाहरण के लिए यदि आप एक PHP अभिव्यक्ति से उत्पन्न HTML सामग्री के ब्लॉक का उत्पादन करने का प्रयास कर रहे हैं, तो निम्न सिंटैक्स का उपयोग करें:
{!! $myHtmlString !!}
ध्यान दें कि आपके डेटा से बचने के लिए मानक {{ }}
सिंटैक्स का उपयोग करना सबसे अच्छा अभ्यास माना जाता है, जब तक कि बिल्कुल आवश्यक न हो। इसके अलावा, जब अविश्वसनीय सामग्री (यानी आपकी साइट के उपयोगकर्ताओं द्वारा आपूर्ति की गई सामग्री) की गूंज हो, तो आपको {!! !!}
का उपयोग करने से बचना चाहिए {!! !!}
वाक्य रचना।
जिसमें आंशिक दृश्य भी शामिल हैं
ब्लेड के साथ, आप आंशिक विचार (जिसे 'भाग' कहा जाता है) को सीधे एक पेज में शामिल कर सकते हैं:
@include('includes.info', ['title' => 'Information Station'])
ऊपर दिए गए कोड में 'विचार / शामिल / info.blade.php' पर दृश्य शामिल होगा। यह एक चर $title
में पास होगा जिसका मूल्य 'सूचना स्टेशन' होगा।
सामान्य तौर पर, एक शामिल पृष्ठ में किसी भी चर तक पहुंच होगी जिसे कॉलिंग पृष्ठ तक पहुंच है। उदाहरण के लिए, यदि हमारे पास:
{{$user}} // Outputs 'abc123'
@include('includes.info')
और 'में / info.blade.php' शामिल हैं:
<p>{{$user}} is the current user.</p>
तब पृष्ठ प्रस्तुत करेगा:
abc123
abc123 is the current user.
प्रत्येक को शामिल करें
कभी-कभी, आप एक foreach
स्टेटमेंट के साथ include
स्टेटमेंट को संयोजित करना चाहते include
, और फ़ॉरेस्ट लूप के भीतर से वेरिएबल्स को एक्सेस में शामिल कर सकते हैं। इस स्थिति में, ब्लेड के @each
निर्देश का उपयोग करें:
@each('includes.job', $jobs, 'job')
पहला पैरामीटर शामिल करने के लिए पेज है। दूसरा पैरामीटर ओवररेट करने के लिए सरणी है। तीसरा पैरामीटर सरणी के तत्वों को सौंपा गया चर है। ऊपर दिया गया कथन इसके समतुल्य है:
@foreach($jobs as $job)
@include('includes.job', ['job' => $job])
@endforeach
सरणी खाली होने पर दृश्य को दिखाने के लिए आप @each
निर्देश पर एक वैकल्पिक चौथा तर्क भी पारित कर सकते हैं।
@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')
लेआउट वंशानुक्रम
एक लेआउट एक दृश्य फ़ाइल है, जो अन्य विचारों द्वारा विस्तारित होती है जो कोड के ब्लॉक को उनके माता-पिता में इंजेक्ट करते हैं। उदाहरण के लिए:
parent.blade.php:
<html>
<head>
<style type='text/css'>
@yield('styling')
</style>
</head>
<body>
<div class='main'>
@yield('main-content')
</div>
</body>
</html>
child.blade.php:
@extends('parent')
@section('styling')
.main {
color: red;
}
@stop
@section('main-content')
This is child page!
@stop
otherpage.blade.php:
@extends('parent')
@section('styling')
.main {
color: blue;
}
@stop
@section('main-content')
This is another page!
@stop
यहां आपको दो उदाहरण चाइल्ड पेज दिखाई देते हैं, जो प्रत्येक माता-पिता का विस्तार करते हैं। बाल पृष्ठ एक @section
को परिभाषित @section
, जो कि माता-पिता को उपयुक्त @yield
विवरण कथन में डाला जाता है।
द्वारा प्रदान की गई दृश्य तो View::make('child')
कहेंगे, लाल रंग में "यह बच्चा पेज है!" जबकि View::make('otherpage')
पाठ के साथ छोड़कर, एक ही एचटीएमएल का उत्पादन करेगा "यह एक और है पृष्ठ! "के बजाय नीले रंग में।
यह विशेष रूप से लेआउट फ़ाइलों के लिए लेआउट फ़ोल्डर और विभिन्न विशिष्ट व्यक्तिगत विचारों के लिए एक अलग फ़ोल्डर होने, उदाहरण के लिए, फ़ाइलों को अलग करना आम है।
लेआउट का उद्देश्य कोड को लागू करना है जो प्रत्येक पृष्ठ पर दिखाई देना चाहिए, जैसे कि साइडबार या हेडर जोड़ना, प्रत्येक व्यक्तिगत दृश्य में सभी HTML बॉयलरप्लेट को लिखने के लिए बिना।
दृश्यों को बार-बार बढ़ाया जा सकता है - यानी पेज 3 कैन @ @extend('page2')
, और पेज 2 @extend('page1')
।
आदेश में एक ही वाक्य रचना के लिए इस्तेमाल के रूप में उपयोग करता है का विस्तार View::make
और @include
, तो फ़ाइल layouts/main/page.blade.php
के रूप में पहुँचा जा सकता है layouts.main.page
।
सभी विचारों को डेटा साझा करना
कभी-कभी आपको अपने कई विचारों में समान डेटा सेट करने की आवश्यकता होती है।
व्यू :: शेयर का उपयोग करना
// "View" is the View Facade
View::share('shareddata', $data);
इसके बाद, $data
की सामग्री $shareddata
नाम के तहत सभी दृश्यों में उपलब्ध होगी।
View::share
आमतौर पर एक सेवा प्रदाता में कहा जाता है, या शायद एक नियंत्रक के निर्माता में, इसलिए डेटा केवल उस नियंत्रक द्वारा लौटाए गए विचारों में साझा किया जाएगा।
व्यू :: कंपोजर का उपयोग करना
व्यू कंपोज़र कॉलबैक या क्लास मेथड होते हैं जो किसी व्यू रेंडर होने पर कॉल किए जाते हैं। यदि आपके पास वह डेटा है जिसे आप हर बार उस दृश्य के लिए बाध्य होना चाहते हैं जो दृश्य प्रदान किया जाता है, तो एक दृश्य संगीतकार आपको उस तर्क को एक स्थान पर व्यवस्थित करने में मदद कर सकता है। आप चर को सीधे किसी विशिष्ट दृश्य या सभी दृश्यों में बाँध सकते हैं।
क्लोजर-आधारित संगीतकार
use Illuminate\Support\Facades\View;
// ...
View::composer('*', function ($view) {
$view->with('somedata', $data);
});
कक्षा आधारित संगीतकार
use Illuminate\Support\Facades\View;
// ...
View::composer('*', 'App\Http\ViewComposers\SomeComposer');
View::share
, सेवा प्रदाता में कंपोजर्स को पंजीकृत करना सबसे अच्छा है।
यदि संगीतकार वर्ग दृष्टिकोण के साथ जा रहा है, तो आपके पास App/Http/ViewComposers/SomeComposer.php
:
use Illuminate\Contracts\View\View;
class SomeComposer
{
public function compose(View $view)
{
$view->with('somedata', $data);
}
}
ये उदाहरण संगीतकार पंजीकरण में '*'
उपयोग करते हैं। यह पैरामीटर एक स्ट्रिंग है जो दृश्य नामों से मेल खाता है जिसके लिए संगीतकार को पंजीकृत करना है ( *
एक वाइल्डकार्ड है)। आप सबफ़ोल्डर के अंतर्गत मार्गों के समूह के एकल दृश्य (उदाहरण के लिए 'home'
) का चयन भी कर सकते हैं (उदाहरण के लिए 'users.*'
)।
मनमाना PHP कोड निष्पादित करें
हालाँकि इस तरह की चीज़ों को एक दृश्य में करना उचित नहीं होगा यदि आप सख्ती से अलग-अलग चिंताओं का इरादा रखते हैं, तो php
ब्लेड निर्देश PHP कोड को निष्पादित करने का एक तरीका देता है, उदाहरण के लिए, एक चर सेट करने के लिए:
@php($varName = 'Enter content ')
(के समान:)
@php
$varName = 'Enter content ';
@endphp
बाद में:
{{ $varName }}
परिणाम:
सामग्री दर्ज करें