我有一个使用布局的控制器
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动态加载内容。
感谢您的帮助和建议!
答案 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#个联系人。