我正在使用Laravel 4并且我收到错误:当我访问admin / profile /时:缺少AdminController的参数1 :: getProfile()
我的AdminController代码:
public function getProfile($id) {
if(is_null($id)) Redirect::to('admin/dashboard');
$user = User::find($id);
$this->layout->content = View::make('admin.profile', array('user' => $user));
}
我的routes.php:
Route::controller('admin', 'AdminController');
我的管理员/个人资料(刀片)视图:
@if(!is_null($user->id))
{{ $user->id }}
@endif
我该如何解决这个问题?我希望他们在没有($ id)的情况下进入admin / profile重定向到仪表板。
答案 0 :(得分:2)
你告诉Laravel你的getProfile方法有一个参数:
public function getProfile($id) {
}
如果您想要成功请求,则必须在您的网址中传递:
http://appdev.local/admin/profile/1
如果您希望看到它失败(重定向到仪表板),您必须在函数参数中添加默认值:
public function getProfile($id = null) { ... }
但是你最好还是把这个值添加到它,因为你可以让机器人(甚至是人)试图在没有参数的情况下访问该路线。
您的观点也过于通用,您必须检查您的$用户是否已设置:
@if(isset($user) && !is_null($user->id))
{{ $user->id }}
@endif
如评论中所述,该行
if(is_null($id)) Redirect::to('admin/dashboard');
必须有回报:
if(is_null($id)) return Redirect::to('admin/dashboard');
关于将用户分享到您的布局,问题是您的getProfile($ id)已经将$ user传递给您的视图,因此您可以将其添加到__construct():
if (Auth::check())
{
$user = Auth::getUser();
View::share('loggedUser', $user);
}
在你看来:
@if(isset($user) && !is_null($user->id))
{{ $user->id }}
@else
{{ $loggedUser->id }}
@endif
关于未找到用户的问题,您有很多选择,这是一个:
public function getProfile($ id){
if (is_null($id))
{
return Redirect::to('admin/dashboard');
}
if ($user = User::find($id))
{
$this->layout->content = View::make('admin.profile', array('user' => $user));
}
else
{
return Redirect::to('admin/dashboard')->withMessage('User not found');
}
答案 1 :(得分:1)
尝试将默认null
值设置为$id
,如下所示:
public function getProfile($id = null) {
...
}