- سهشنبه 22 آبان 1397 ساعت 20:32
- 5.6.29
- در حال تکمیل
- منقضی شده
ساخت ویوها
دنبال اطلاعات بیشتری درباره نحوه نوشتن تمپلتهای blade هستید؟ برای شروع داکیومنت blade را مطالعه کنید.
ویوها حاوی کدهای HTML هستند که توسط اپلیکیشن استفاده میشوند و لاجیک اپلیکیشن / کنترلر را از لاجیک لایه نمایش جدا میکنند. ویوها در دایرکتوری resources/views
قرار میگیرند. یک ویو ساده میتواند شبیه مثال زیر باشد:
<!-- View stored in resources/views/greeting.blade.php -->
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
از آنجایی که این ویو در resources/views/greeting.blade.php
ذخیره شده است، با استفاده از هلپر گلوبال view
میتوانیم آن را به شکل زیر برگردانیم:
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
همانطور که میبینید، اولین آرگومان ارسال شده به هلپر view
با نام فایل ویو در دایرکتوری resources/views
متناظر است. آرگومان دوم، یک آرایه از دادههایی است که باید برای ویو مورد نظر در دسترس شوند. در این مثال، ما متغییر name
را ارسال کردهایم که در با استفاده از سینتکس Blade، در ویو قابل نمایش است.
البته، علاوه بر این، ویوها میتوانند با ساختاری تودرتو، در سابدایرکتوریهایی در دایرکتوری resources/views
قرار بگیرند. برای ارجاع به ویوهای تودرتو، میتوان از علامت "نقطه" استفاده کرد. برای مثال، اگر ویو شما در resources/views/admin/profile.blade.php
ذخیره شده باشد، میتوانید به شکل زیر به آن ارجاع کنید:
return view('admin.profile', $data);
مشخص کردن وجود یک ویو
اگر میخواهید مشخص کنید که آیا یک ویو وجود دارد، میتوانید از فساد View
استفاده کنید. اگر ویو وجود داشته باشد، متد exists
مقدار true
را برمیگرداند.
use Illuminate\Support\Facades\View;
if (View::exists('emails.customer')) {
//
}
ساخت اولین ویوی در دسترس
با استفاده از متد first
، میتوانید از بین ویوهای مشخص شده در یک آرایه، اولین ویو را ایجاد کنید. هنگامی که اپلیکیشن یا پکیج شما، امکان سفارشیسازی یا بازنویسی ویوها را ارائه میدهد، این مورد بسیار کاربردی است:
return view()->first(['custom.admin', 'admin'], $data);
البته، این مورد را با فساد View
نیز میتونید فراخوانی کنید:
use Illuminate\Support\Facades\View;
return View::first(['custom.admin', 'admin'], $data);
ارسال داده به ویو
همانطور که در مثال قبل دیدید، میتوانید آرایهای از دادهها را به ویوها ارسال کنید:
return view('greetings', ['name' => 'Victoria']);
هنگامی که اطلاعات را با این شیوه ارسال میکنید، داده باید به شکل آرایهای با کلید و مقدار باشد. داخل ویو، با استفاده از کلید متناظر، میتوانید به هر کدام از این مقادیر دسترسی داشته باشید، برای مثال <?php echo $key; ?>
. به عنوان یک روش جایگزین برای ارسال یک آرایه کامل حاوی دادهها به هلپرفانکشن view
، میتوانید از متد with
استفاده کنید تا تکههای داده را به صورت جداگانه به ویو اضافه کنید:
return view('greeting')->with('name', 'Victoria');
اشتراکگذاری دادهها برای تمام ویوها
گاهی ممکن است نیاز به اشتراکگذاری بخشی از دادهها را با تمام ویوهایی که توسط اپلیکیشنتان رندر میشوند، به اشتراک بگذارید. همچنین، با استفاده از متد share
فساد View
میتوانید اینکار را انجام دهید. به طور معمول، share
را باید داخل متد boot
یکی از سرویسپروایدرها قرار دهید. اجباری وجود ندارد که این فراخوانی را در AppServiceProvider
انجام دهید یا یک سرویسپروایدر جداگانه برای میزبانی این کد فراخوانی بسازید.
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('key', 'value');
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
ویو کامپوزرها (View Composers)
ویو کامپوزرها، متدهای کلاس یا کالبکهایی هستند که وقتی یک ویو رندر شده است، فراخوانی میشوند. اگر دادهای دارید که میخواهید هر دفعه که یک ویو رندر شد، آن داده را به ویو مورد نظر خود متصل کنید، یک ویو کامپوزر میتواند به شما کمک کند تا آن لاجیک را تنها با قرار دادن در یک محل سازماندهی کنید.
بیایید برای این مثال ویو کامپوزر را داخل یک سرویسپرووایدر رجیستر کنیم. فساد View
متدهای اینترفیس Illuminate\Contracts\View\Factory
را پیادهسازی میکند، پس با استفاده از این فساد میتوانید به متدهای نهفته در این کانترکت (contract) دسترسی داشته باشید. به یاد داشته باشید، لاراول هیچ دایرکتوری پیشفرضی را برای ویو کامپوزرها در نظر نگرفته است. هر طوری که مایل باشید، برای سازماندهی آنها آزاد هستید. برای مثال، میتوانید دایرکتوری با نام app/Http/ViewComposers
برای آنها بسازید.
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
/**
* Register bindings in the container.
*
* @return void
*/
public function boot()
{
// Using class based composers...
View::composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
);
// Using Closure based composers...
View::composer('dashboard', function ($view) {
//
});
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
به یاد داشته باشید، اگر سرویسپرووایدر جدیدی برای رجیستر کردن ویو کامپوزرتان ساختهاید، باید سرویس پرووایدر مورد نظرتان را در آرایه providers
که در فایل کانفیگ config/app.php
قرار دارد، اضافه کند.
حالا که کامپوزر موردنظرمان را رجیستر کردیم، هر بار که ویو profile
رندر شود، متد ProfileComposer@compose
اجرا خواهد شد. بنابراین، بیایید کلاس کامپوزر را تعریف کنیم:
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use App\Repositories\UserRepository;
class ProfileComposer
{
/**
* The user repository implementation.
*
* @var UserRepository
*/
protected $users;
/**
* Create a new profile composer.
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
// Dependencies automatically resolved by service container...
$this->users = $users;
}
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('count', $this->users->count());
}
}
درست قبل از اینکه ویو رندر شود، متد compose
کامپوزر با نمونه Illuminate\View\View
فراخوانی میشود. برای افزودن دادهها به ویو، میتوانید از متد with
استفاده کنید.
تمامی ویو کامپوزرها به وسیله سرویسکانتینر resolve میشوند، بنابراین هر وابستگی را که نیاز دارید، میتوانید در constructor کامپوزر type-hint کنید.
اَتَچ کردن یک کامپوزر به چند ویو
با ارسال آرایهای حاوی ویوها به آرگومان اول متد composer
میتوانید همزمان یک ویو کامپوزر را به چند ویو اَتَچ (attach) کنید:
View::composer(
['profile', 'dashboard'],
'App\Http\ViewComposers\MyViewComposer'
);
متد composer
یک کاراکتر را نیز به عنوان یک وایلدکارد *
میپذیرد که به شما امکان اَتَچ کردن یک کامپوزر به همه ویوها را میدهد:
View::composer('*', function ($view) {
//
});
ویو کریتورها (View Creators)
ویو کریتورها، خیلی شبیه ویو کامپوزرها هستند؛ گرچه، به جای اینکه تقریبا تا زمان رندر ویو صبر کنند، بلافاصله بعد اینکه نمونهسازی ویو انجام شود، اجرا میشوند. برای رجیستر کردن یک ویو کریتور، از متد creator
استفاده کنید:
View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');
سایر پستهای داکیومنت
- پیشگفتار
- Release Notes ترجمه در ورژنهای بعدی
- راهنمای آپگرید ترجمه در ورژنهای بعدی
- Contribution Guide ترجمه در ورژنهای بعدی
- شروع
- نصب
- پیکربندی
- ساختار دایرکتوری ترجمه در ورژنهای بعدی
- Laravel Homestead ترجمه در ورژنهای بعدی
- Laravel Valet ترجمه در ورژنهای بعدی
- دپلویمنت ترجمه در ورژنهای بعدی
- مفاهیم معماری
- چرخه کار ریکوئستها
- Service Container ترجمه در ورژنهای بعدی
- سرویس پرووایدرها
- فسادها ترجمه در ورژنهای بعدی
- Contracts ترجمه در ورژنهای بعدی
- اصول اولیه
- مسیریابی
- میدلور
- حفاظت در مقابل حملات CSRF
- کنترلرها
- HTTP Requests ترجمه در ورژنهای بعدی
- HTTP Responses ترجمه در ورژنهای بعدی
- ویوها
- تولید URL
- HTTP Session ترجمه در ورژنهای بعدی
- Validation ترجمه در ورژنهای بعدی
- Error Handling ترجمه در ورژنهای بعدی
- Logging ترجمه در ورژنهای بعدی
- فرانتاند
- تمپلتهای Blade
- محلیسازی
- JavaScript & CSS Scaffolding ترجمه در ورژنهای بعدی
- Compiling Assets (Laravel Mix) ترجمه در ورژنهای بعدی
- امنیت
- Authentication ترجمه در ورژنهای بعدی
- API Authentication (Passport) ترجمه در ورژنهای بعدی
- Authorization ترجمه در ورژنهای بعدی
- Encryption ترجمه در ورژنهای بعدی
- Hashing ترجمه در ورژنهای بعدی
- Resetting Passwords ترجمه در ورژنهای بعدی
- مباحث عمیقتر
- Artisan Console ترجمه در ورژنهای بعدی
- Broadcasting ترجمه در ورژنهای بعدی
- Cache ترجمه در ورژنهای بعدی
- Collections ترجمه در ورژنهای بعدی
- Events ترجمه در ورژنهای بعدی
- File Storage ترجمه در ورژنهای بعدی
- Helpers ترجمه در ورژنهای بعدی
- Mail ترجمه در ورژنهای بعدی
- Notifications ترجمه در ورژنهای بعدی
- Package Development ترجمه در ورژنهای بعدی
- Queues ترجمه در ورژنهای بعدی
- Task Scheduling ترجمه در ورژنهای بعدی
- دیتابیس
- دیتابیس: شروع ترجمه در ورژنهای بعدی
- Database: Query Builder ترجمه در ورژنهای بعدی
- دیتابیس: صفحهبندی
- دیتابیس: مایگریشن
- دیتابیس: سیدینگ
- Redis ترجمه در ورژنهای بعدی
- Eloquent ORM
- Eloquent: Getting Started ترجمه در ورژنهای بعدی
- Eloquent: Relationships ترجمه در ورژنهای بعدی
- Eloquent: Collections ترجمه در ورژنهای بعدی
- Eloquent: Mutators ترجمه در ورژنهای بعدی
- Eloquent: API Resources ترجمه در ورژنهای بعدی
- Eloquent: Serialization ترجمه در ورژنهای بعدی
- Testing
- Testing: Getting Started ترجمه در ورژنهای بعدی
- HTTP Tests ترجمه در ورژنهای بعدی
- Browser Tests (Laravel Dusk) ترجمه در ورژنهای بعدی
- Database Testing ترجمه در ورژنهای بعدی
- Mocking ترجمه در ورژنهای بعدی
- Official Packages
- Laravel Cashier ترجمه در ورژنهای بعدی
- Envoy Task Runner ترجمه در ورژنهای بعدی
- Laravel Horizon ترجمه در ورژنهای بعدی
- API Authentication (Passport) ترجمه در ورژنهای بعدی
- Laravel Scout ترجمه در ورژنهای بعدی
- Laravel Socialite ترجمه در ورژنهای بعدی