0

テンプレートを再利用し、「コンテンツ」セクション (index.blade.php) に属する ajax 応答 (html テーブル) としてレンダリングされたセクションを 1 つだけ返したいと考えています。

@section('content')
html...
@endsection

以下のみを含む ajax (ajax.blade.php) と呼ばれる別のレイアウトを作成しました。

@yield('content')

私のコントローラー:

class Some_Controller extends Base_Controller {

    public $restful = true;
    public $layout = 'layouts.main';

public function get_index (){
if ( Request::ajax() )
 $this->layout = 'layouts.ajax';

$view = View::make('some.index')->with('data', 'shtg');

$this->layout->content = $view;
}
}

通常のGETリクエストを介してルートをリクエストすると機能します...しかし、ajaxを介してリクエストするとエラーが発生します:

Attempt to assign property of non-object

を含む行に

$this->layout->content = $view;

私も試してみました

return Section::yield('content');

空のドキュメントを返します。

レンダリングされたセクションを返す方法はありますか? フォーラムを検索しましたが、次のもの以外は見つかりませんでした。

http://forums.laravel.io/viewtopic.php?id=2942

これは同じ原理を使用しており、私にはうまくいきません (上記のリンクに記載されているすべてのバリエーションを試しました)。

ありがとう!

4

1 に答える 1

1

ブレード テンプレートコントローラ テンプレートを混在させているようです。コントローラー レイアウトを使用する場合 (私の好み)、 と を削除し@section('content')@endsectionに置き換え@yield('content')ます$content

しかし、それはあなたの問題全体ではありません。次の行は、レイアウト メソッドによってピックアップされ、実際のビューに変換されます...

public $layout = 'layouts.main';

次のような layout_ajax 属性を追加して、コントローラーのレイアウト関数を簡単に拡張できます...

/**
 * The layout used by the controller for AJAX requests.
 *
 * @var string
 */
public $layout_ajax = 'layouts.ajax';

/**
 * Create the layout that is assigned to the controller.
 *
 * @return View
 */
public function layout()
{
    if ( ! empty($this->layout_ajax) and Request::ajax() )
    {
        $this->layout = $this->layout_ajax;
    }
    return parent::layout();
}
于 2013-04-29T07:30:54.387 に答える