Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在控制器中注入模型时,Laravel自定义错误_Php_Laravel_Error Handling_Laravel 5.2 - Fatal编程技术网

Php 在控制器中注入模型时,Laravel自定义错误

Php 在控制器中注入模型时,Laravel自定义错误,php,laravel,error-handling,laravel-5.2,Php,Laravel,Error Handling,Laravel 5.2,所以我遇到了一个问题,我还没有完全解决,也不知道从哪里开始 我知道Laravel有一个很好的findOrFail()函数,但我似乎无法在我的例子中使用它。例如,我有一条路线如下: Route::get('user/{user}', 'UserController@show); 我的控制器 public function show(User $user) { //never reaches this section } 现在这将正常工作,但如果记录不存在,Laravel会在我进入函数

所以我遇到了一个问题,我还没有完全解决,也不知道从哪里开始

我知道Laravel有一个很好的
findOrFail()
函数,但我似乎无法在我的例子中使用它。例如,我有一条路线如下:

Route::get('user/{user}', 'UserController@show);
我的控制器

public function show(User $user)
{
    //never reaches this section 
}
现在这将正常工作,但如果记录不存在,Laravel会在我进入函数之前抛出错误。有没有一种既简单又好的方法可以在不将函数更改为的情况下捕获错误

public function show($id)
{
    $user = User::findOrFail($id)
}

我发现在我的函数参数中有用户类更好,并且不希望将其删除。

第一次回答问题时,请耐心等待

您可以使用PHP try/catch块。比如说:

try {
        //Your code here
    } catch (\Exception $e) {
        return \Redirect::to('/users')
            ->with('error', 1)
            ->with('message', 'Error getting your record!');
    }
然后,在您的Laravel刀片中,您可以执行以下操作:

@if(!empty($error) && $error == 1)
   <div>
      <strong>Uh-Oh!</strong> 
        @if(!empty($message))
            {!! $message !!}
        @endif
   </div>
@endif
@if(!empty($error)&&$error==1)

@如果(!empty($message))
{!!$message!!}
@恩迪夫
@恩迪夫
显示错误。您还可以重定向到所需的某个错误页面

Per(向下滚动至“自定义“未找到”行为”标题):

如果希望指定自己的“未找到”行为,请将
闭包作为第三个参数传递给
model
方法:

$router->model('user', 'App\User', function () {
    throw new NotFoundHttpException;
});
之前,它们指定了放置该代码的位置:

您应该在
RouteServiceProvider::boot
方法中定义模型绑定


问题是,在我可以在函数中执行任何操作之前,错误就已经显示出来了。即使我把回声放在“测试”;死亡在我的函数中,这不会被显示。如果你的代码没有到达你的函数,那就意味着之前有问题!您的路由是一个带有用户ID URL参数的GET。因此,您的函数应该在第一行中读取
公共函数show($userid)
。然后,当您进行查询时,您可以执行类似于
$user=user::find($userid)
的操作。然后您可以执行类似于
if($user){//code}或者{//return to users with error}
的操作,从Laravel 5开始,您还可以执行类似于
app()->make(\app\Models\user::class)->where('users.id','=',$userid)->get()我认为这更干净,你不必注入你的模型。事实上,如果记录存在,你可以在函数中使用Classname$param,如我的代码所示,它会工作得很好。只是如果记录不存在,laravel会自动为您生成一个错误。我只是想知道在哪里能抓到这个。我错过了这个,真是太愚蠢了,非常感谢它解决了我的问题!