当模型处于参数类型提示中时,找不到Laravel 5.6页面

时间:2018-08-24 12:03:02

标签: laravel laravel-5 laravel-routing laravel-5.6

我有一种显示图像的方法,当在文件系统上找不到该图像时,它应该返回一个未找到的图像。 在我在方法中指定参数类型之前,所有这些工作都很好。

当我的代码是这样时,它不起作用:

public function showImage( LibraryFile $image, string $name ): BinaryFileResponse {
    if ( ( $image->thumbnails[ $name ] ?? null ) && File::exists( $image->thumbnails[ $name ] ) ) {
        return response()
            ->file( $image->thumbnails[ $name ] );

    }

    return response()
        ->file( public_path( 'images/no-image-available.png' ) );
}

它确实像这样工作:

public function showImage( $image, string $name ): BinaryFileResponse {
    if ( ( $image->thumbnails[ $name ] ?? null ) && File::exists( $image->thumbnails[ $name ] ) ) {
        return response()
            ->file( $image->thumbnails[ $name ] );

    }

    return response()
        ->file( public_path( 'images/no-image-available.png' ) );
}

我认为这可能是因为找不到模型,因此Laravel决定抛出404。是否有任何方法可以更改此代码?

1 个答案:

答案 0 :(得分:1)

您应在Route model binding中使用自定义分辨率绑定,如下所示:

Route::bind('image', function ($value) {
    return App\LibraryFile::find($image) ?? abort(response()
    ->file( public_path( 'images/no-image-available.png' )));
});

在未找到模型的情况下返回自定义响应