我有一种显示图像的方法,当在文件系统上找不到该图像时,它应该返回一个未找到的图像。 在我在方法中指定参数类型之前,所有这些工作都很好。
当我的代码是这样时,它不起作用:
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。是否有任何方法可以更改此代码?
答案 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' )));
});
在未找到模型的情况下返回自定义响应