5

ページを通常どおり (ajax ではなく) 要求すると、印刷された文字列 "@extends('layouts.default')" が表示される空白の画面が表示される理由を説明してもらえますか?

@if(!Request::ajax())
  @extends('layouts.default') 
  @section('content')
@endif
Test
@if(!Request::ajax())
  @stop
@endif

Ajax の問題を解決しようとしています。リクエスト タイプごとに 2 つのテンプレートを作成したくありません。また、ブレード テンプレートを使用したいので、コントローラー レイアウトを使用してもうまくいきません。ブレードテンプレートでそれを行うにはどうすればよいですか? 私はこのLaravel を見ていました: how to render only one section of a template?

ところで。ajaxでリクエストすると、正常に機能します。

4

3 に答える 3

9

はい、@extends は 1 行目になければなりません。

そして、PJAXの解決策を見つけました。最初は、これで問題が解決するかどうか確信が持てませんでしたが、解決しました。この方法で実際にブレードの機能を失うことができないのに、なぜブレードの機能を失うことを恐れていたのかわかりません. 誰かが PJAX を使用していて、レイアウトの有無にかかわらず 1 つのテンプレートを使用する必要がある場合、これが解決策になる可能性があります。

protected $layout = 'layouts.default';

public function index()
{
  if(Request::header('X-PJAX'))
  {
    return $view = View::make('home.index')
      ->with('title',  'index');
  }
  else
  {
    $this->layout->title = 'index';
    $this->layout->content = View::make('home.index');
  }
}
于 2013-03-05T16:46:45.027 に答える
3

1行目に移動@extendsしてみると、ブレードテンプレートが正しくレンダリングされることがわかります。

ajaxの問題を解決することに関しては、ロジックをコントローラーに戻す方が良いと思います。

例:

…
if ( Request::ajax() )
{
    return Response::eloquent($books);  
} else {
    return View::make('book.index')->with('books', $books);
}
…

詳細については、このスレッドをご覧ください:http ://forums.laravel.io/viewtopic.php?id=2508

于 2013-03-05T14:37:34.687 に答える
3

あなたはまだそのように最初のラインでショートハンドであなたの状態を実行することができます

@extends((Request::ajax())?"layout1":"layout2")
于 2014-03-16T10:32:05.200 に答える