Laravel错误:ErrorException缺少参数1?

时间:2014-04-09 18:33:02

标签: php laravel laravel-4

我正在使用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重定向到仪表板。

2 个答案:

答案 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) {
   ...
}
相关问题