Я использую laravel 4.0, я стараюсь отображать макет, только если переменная == 0 (на всякий случай, если пользователь пытается перейти к URL-адресу, а не щелкать по нему) (я знаю, что могу перенаправлять вместо расширения, но пока это нежелательно)
Я пытаюсь заставить макет расширяться только тогда, когда пользователь переходит на страницу вручную, noajax устанавливается в значение true, если его не отправляется запрос ajax, когда он переходит к функции, поэтому, если пользователю нужно перейти к URL-адресу вручную он все равно будет отображать страницу, но расширит макет.
@if ($noajax==1)
@extends ( ‘layouts.master’)
@endif
@section ( ‘содержание’)
// контроллер
public function test($id,$model)
{
if (Request::ajax())
{
//$foreign_key and $model must be <> null
if ($id == null || $model == null) {
$this->render('../Errors/missing_arg', 'error');
return;
}
if($model=="ArtObj")
{
$partable = "art_objects";
$path='img/art-objects/';
}
$parid=$id;
$noajax=0;
$mediaimgs = Media::where('parent_id' , $id )->where('parent_table', $partable)->paginate(15);
$response = Response::Json($mediaimgs);
return View::make('/Admin/manageimage/manage_image',compact('parid','mediaimgs','model','path','noajax'));}
else{
if($model=="ArtObj")
{
$partable = "art_objects";
$path='img/art-objects/';
}
$parid=$id;$mediaimgs = Media::where('parent_id' , $id )->where('parent_table', $partable)->paginate(15);
$response = Response::Json($mediaimgs);
$noajax = 1;
return View::make('/Admin/manageimage/manage_image',compact('parid','mediaimgs','model','path','noajax'));
}
}
В этом случае вы должны использовать 2 вида в контроллере.
В контроллере вы должны использовать:
if ($noajax) {
return View::make('noajax');
}
else {
return View::make('ajax');
}
В noajax
вид вы можете расширить из любого другого вида, и если noajax
а также ajax
иметь общий код, вы должны поместить его в отдельный файл и использовать @include
в этих обоих представлениях включить общую часть кода.
Других решений пока нет …