我在Laravel的routes.php
上设置了这样的资源:
Route::resource('users', 'UsersController');
我创建了UsersController
,并将其设置为使用布局:
class UsersController extends BaseController {
protected $layout = 'layouts.default';
public function index()
{
$view = View::make('users.index');
$this->layout->title = "User Profile";
$this->layout->content = $view;
}
}
当我使用http://localhost/myapp/users/index
访问它时,我收到错误:
Undefined variable: title
但如果我手动设置路线如:
Route::get('/users/index', array('as' => '/users/index', 'uses' => 'UsersController@index'));
工作正常。
知道为什么会这样吗?
编辑:这些是观点
default.blade.php
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ $title }}</title>
<link rel="stylesheet" href="{{ asset('assets/css/style.default.css') }}" type="text/css" />
</head>
<body>
{{ $content }}
</body>
</html>
用户/ index.php的
<div>
Some content ...
</div>
答案 0 :(得分:1)
我认为问题实际上与你如何称呼你的路线有关。
如果查看文档(http://laravel.com/docs/controllers#resource-controllers),您会发现/resource/index
没有路由。这将被解析为/resource/{id}
,其中$ id =“index”,并且将寻找show($id)
函数。它知道它应该使用默认布局,但由于你没有设置标题的show()函数,所以没有标题传递给视图并且它会爆炸。
我愿意打赌,如果你只是去http://localhost/myapp/users
,那就没事了。
答案 1 :(得分:0)
class UsersController extends BaseController {
protected $layout = 'layouts.default';
public function index()
{
$data['title'] = "User Profile";
$this->layout->content = View::make('users.index')
->withData($data);
return $this->layout->content;
}
}
或者
class UsersController extends BaseController {
protected $layout = 'layouts.default';
public function index()
{
$title = "User Profile";
$this->layout->content = View::make('users.index')
->withData($title);
return $this->layout->content;
}
}
但是使用$ data数组很容易。在视图中使用它时,您可以通过它的名称来引用它。所以$ data ['title']用$ title调用。