0

我想重用我的模板,并且只想返回一个呈现的部分作为属于“内容”部分(index.blade.php)的ajax响应(html表)。

@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')and @endsection,并替换@yield('content')$content.

但是,这不是您的全部问题。下面这行被layout方法拾取并转化为真实视图...

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 回答