从布局控制器生成的Laravel巢视图

时间:2014-02-11 16:02:07

标签: laravel laravel-4 views

我有一个使用布局的控制器

class MainContentController extends BaseController {

  protected $layout = "desktop.contacts.main_contacts";

  public function index()
  {
     $persons = Person::with("contact.addresses", "companies")->has("companies", "=", "0")->get();
     $companies = Company::with("persons", "contact.addresses")->get();
     $data["persons"] = $persons;
     $data["companies"] = $companies;
     $this->layout->with($data);
  }
}

现在,如果我做一个路由Route::get('test', 'MainContentController@index');,我会得到控制器生成的视图main_contacts的正确结果。

但是我想把这个结果嵌入我的主视图中 我试图实例化MainContentController并将index()方法的结果作为数据传递给视图,但它说

Call to a member function with() on a non-object

代表

$this->layout->with($data);

我的问题是:如何将布局控制器的结果传递到主视图中。我能窝吗?我是否需要以某种方式获取渲染的html并将其作为数据传递给我回应它的主设备?

我想要这种分离,因为我想稍后根据搜索查询通过Ajax动态加载内容。

感谢您的帮助和建议!

2 个答案:

答案 0 :(得分:1)

你可以试试这个

class MainContentController extends BaseController {

    // Set the master layout here
    protected $layout = 'layouts.master';

    public function index()
    {
        $persons = Person::with("contact.addresses", "companies")->has("companies", "=", "0")->get();
        $companies = Company::with("persons", "contact.addresses")->get();
        $data = array("persons" => $persons, "companies" => $companies);

        // Set the content to master layout
        $this->layout->content = View::make('desktop.contacts.main_contacts', $data);
    }
}

检查the manual,就在那里。

更新:在您的主布局中,您应该使用以下代码来呈现竞争:

@yield('content')

答案 1 :(得分:0)

如果您将搜索功能移动到MainController然后

,该怎么办?
return View::make('desktop.contact.main_contacts")->with('data', $data);

然后你可以向

发出一个AJAX请求
Route::get('/search/{terms}', ['uses' => 'MainController@search'); 

并将整个页面作为回复返回

然后就这样做回调你的AJAX:

function(resp) { 
    $('#contacts').html(resp); 
}

其中$('#contacts')指的是'desktop.contacts.index'中的div#个联系人。