بازدیدها و پاسخ ها
پاسخ های اساسی
رشته های برگشتی از مسیرها
Route::get('/', function(){ return 'Hello World';});
ایجاد پاسخ های سفارشی
یک
Response
نمونه از
Symfony\Component\HttpFoundation\Response
کلاس به ارث میبرد و روشهای مختلفی را برای ساخت پاسخهای HTTP ارائه
میکند.
$response = Response::make($contents, $statusCode); $response->header('Content-Type', $value); return $response;
اگر نیاز به دسترسی به متدهای کلاس دارید
Response
، اما می خواهید یک view را به عنوان محتوای پاسخ برگردانید، می توانید
Response::view
برای راحتی کار از روش استفاده کنید:
return Response::view('hello')->header('Content-Type', $type);
پیوست کردن کوکی ها به پاسخ ها
$cookie = Cookie::make('name', 'value'); return Response::make($content)->withCookie($cookie);
تغییر مسیرها
بازگشت یک تغییر مسیر
return Redirect::to('user/login');
بازگشت یک تغییر مسیر با داده های فلش
return Redirect::to('user/login')->with('message', 'Login Failed');
توجه: از آنجایی که
with
روش داده ها را به جلسه فلش می کند، می توانید داده ها را با استفاده ازSession::get
روش معمولی بازیابی کنید.
بازگشت یک تغییر مسیر به یک مسیر نامگذاری شده
return Redirect::route('login');
بازگشت یک تغییر مسیر به یک مسیر نامگذاری شده با پارامترها
return Redirect::route('profile', array(1));
بازگشت یک تغییر مسیر به یک مسیر نامگذاری شده با استفاده از پارامترهای نامگذاری شده
return Redirect::route('profile', array('user' => 1));
بازگشت یک تغییر مسیر به یک اقدام کنترلر
return Redirect::action('HomeController@index');
بازگشت یک تغییر مسیر به یک کنش کنترلر با پارامترها
return Redirect::action('UserController@profile', array(1));
برگرداندن یک تغییر مسیر به یک عملکرد کنترلر با استفاده از پارامترهای نامگذاری شده
return Redirect::action('UserController@profile', array('user' => 1));
بازدیدها
نماها معمولاً حاوی HTML برنامه شما هستند و راهی مناسب برای جداسازی منطق
کنترلر و دامنه شما از منطق ارائه شما ارائه می دهند.
نماها در
app/views
فهرست ذخیره می شوند.
یک نمای ساده می تواند چیزی شبیه به این باشد:
<!-- View stored in app/views/greeting.php --> <html> <body> <h1>Hello, <?php echo $name; ?></h1> </body></html>
این نمای ممکن است به صورت زیر به مرورگر بازگردانده شود:
Route::get('/', function(){ return View::make('greeting', array('name' => 'Taylor'));});
آرگومان دوم ارسال شده به
View::make
آرایه ای از داده ها است که باید در دسترس view قرار گیرد.
انتقال داده به نماها
// Using conventional approach$view = View::make('greeting')->with('name', 'Steve'); // Using Magic Methods$view = View::make('greeting')->withName('steve');
در مثال بالا متغیر
$name
از نمای قابل دسترسی است و حاوی
Steve
.
در صورت تمایل، می توانید آرایه ای از داده ها را به عنوان پارامتر دوم داده
شده به
make
متد ارسال کنید:
$view = View::make('greetings', $data);
همچنین میتوانید بخشی از داده را در همه نماها به اشتراک بگذارید:
View::share('name', 'Steve');
ارسال یک نمای فرعی به یک نما
گاهی اوقات ممکن است بخواهید یک نما را به نمای دیگری منتقل کنید.
به عنوان مثال، با توجه به یک نمای فرعی ذخیره شده در
app/views/child/view.php
، می توانیم آن را به نمای دیگری مانند این ارسال کنیم:
$view = View::make('greeting')->nest('child', 'child.view'); $view = View::make('greeting')->nest('child', 'child.view', $data);
سپس نمای فرعی را می توان از نمای والد ارائه کرد:
<html> <body> <h1>Hello!</h1> <?php echo $child; ?> </body></html>
تعیین اینکه آیا دیدگاه وجود دارد
اگر نیاز به بررسی وجود نما دارید، از
View::exists
روش زیر استفاده کنید:
if (View::exists('emails.customer')){ //}
نمایش composerان
View composer ها callback یا متدهای کلاسی هستند که هنگام رندر شدن یک view فراخوانی می شوند. اگر دادههایی دارید که میخواهید هر بار که آن نما در برنامه شما ارائه میشود، به یک نمای معین متصل شود، یک View Composer میتواند آن کد را در یک مکان واحد سازماندهی کند. بنابراین، composerان View ممکن است مانند "مدل های مشاهده" یا "ارائه کننده" عمل کنند.
تعریف View Composer
View::composer('profile', function($view){ $view->with('count', User::count());});
اکنون هر بار که
profile
نما ارائه می شود،
count
داده ها به نما متصل می شوند.
همچنین میتوانید یک View composer را به چندین نما به طور همزمان پیوست کنید:
View::composer(array('profile','dashboard'), function($view){ $view->with('count', User::count());});
اگر ترجیح می دهید از یک composer مبتنی بر کلاس استفاده کنید که مزایای حل شدن از طریق برنامه IoC Container را فراهم می کند ، می توانید این کار را انجام دهید:
View::composer('profile', 'ProfileComposer');
یک کلاس view composer باید به این صورت تعریف شود:
class ProfileComposer { public function compose($view) { $view->with('count', User::count()); } }
تعریف چند composer
می توانید از این
composers
روش برای ثبت گروهی از composerان به طور همزمان استفاده کنید:
View::composers(array( 'AdminComposer' => array('admin.index', 'admin.profile'), 'UserComposer' => 'user', 'ProductComposer@create' => 'product'));
توجه: هیچ قراردادی در مورد محل ذخیره کلاس های composer وجود ندارد. شما آزاد هستید که آنها را در هر مکانی ذخیره کنید تا زمانی که بتوان آنها را به صورت خودکار با استفاده از دستورالعمل های موجود در
composer.json
فایل خود بارگیری کرد.
مشاهده سازندگان
نمایش
سازندگان
تقریباً دقیقاً مانند composerان View کار می کنند.
با این حال، آنها بلافاصله پس از نمایش نمونه، شلیک می شوند.
برای ثبت یک View Creator، به سادگی از
creator
روش استفاده کنید:
View::creator('profile', function($view){ $view->with('count', User::count());});
پاسخ های ویژه
ایجاد پاسخ JSON
return Response::json(array('name' => 'Steve', 'state' => 'CA'));
ایجاد پاسخ JSONP
return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));
ایجاد پاسخ دانلود فایل
return Response::download($pathToFile); return Response::download($pathToFile, $name, $headers);
توجه: Symfony HttpFoundation، که دانلود فایلها را مدیریت میکند، باید فایلی که دانلود میشود دارای نام فایل ASCII باشد.
ماکروهای پاسخگویی
اگر می خواهید یک پاسخ سفارشی تعریف کنید که بتوانید مجدداً در مسیرهای
مختلف و کنترلرهای خود از آن استفاده کنید، می توانید از
Response::macro
روش زیر استفاده کنید:
Response::macro('caps', function($value){ return Response::make(strtoupper($value));});
تابع
macro
یک نام را به عنوان اولین آرگومان خود و یک Closure را به عنوان دومین
آرگومان خود می پذیرد.
هنگام فراخوانی نام ماکرو در
Response
کلاس، بسته شدن ماکرو اجرا می شود:
return Response::caps('foo');
شما می توانید ماکروهای خود را در یکی از
app/start
فایل های خود تعریف کنید.
از طرف دیگر، می توانید ماکروهای خود را در یک فایل جداگانه سازماندهی کنید
که در یکی از
start
فایل های شما موجود است.