forxer / laravel-gravatar
为Laravel项目提供简单Gravatar集成功能的库。
Requires
- php: ^8.2
- forxer/gravatar: ^5.0
- laravel/framework: ^10.0 || ^11.0
Requires (Dev)
- driftingly/rector-laravel: ^1.2
- laravel/pint: ^1.16.0
- rector/rector: ^1.1.0
README
Gravatar for Laravel
此包为Laravel项目提供了简单的Gravatar集成。
此包基于 forxer/Gravatar 构建。如果您想深入了解,可以在其README文件中找到更多信息。
$avatar = gravatar('email@example.com') ->size(120) ->defaultImage('robohash') ->extension('jpg'); //... echo $avatar;
索引
要求
- PHP 8.2或更高版本
- Laravel 10.0或更高版本
如果您想使用低于PHP 8.2的版本和/或低于Laravel 10的版本,请使用 版本 2 或 版本 1。
安装
通过composer安装
composer require forxer/laravel-gravatar
使用
使用此库有三种方式
- 使用
gravatar()
助手函数 - 使用外观
Gravatar::create()
- 或通过注入
LaravelGravatar\Gravatar
服务
所有这些方式都返回一个 LaravelGravatar\Gravatar
服务的实例。Gravatar服务有3个主要方法
image()
返回一个扩展自 forxer/Gravatar 中的Gravatar\Image
的LaravelGravatar\Image
实例avatar()
是第一个的别名profile()
返回一个扩展自 forxer/Gravatar 中的Gravatar\Profile
的LaravelGravatar\Profile
实例
这些 LaravelGravatar\Image
和 LaravelGravatar\Profile
的实例允许您根据需要定义特定的设置/参数。因此,您可以使用它们来构建Gravatar图片/个人资料URL。
无论您使用哪种方法,都可以使用 url()
方法来检索它。或者直接显示URL,因为它们实现了 __toString()
方法。
检索实例
使用助手函数
$gravatar = gravatar(); // LaravelGravatar\Gravatar instance $avatar = gravatar('email@example.com'); // LaravelGravatar\Image instance $avatar = gravatar()->image('email@example.com'); // LaravelGravatar\Image instance $avatar = gravatar()->avatar('email@example.com'); // LaravelGravatar\Image instance $profile = gravatar()->profile('email@example.com'); // LaravelGravatar\Profile instance
或使用外观
use LaravelGravatar\Facades\Gravatar; $gravatar = Gravatar::create(); // LaravelGravatar\Gravatar instance $avatar = Gravatar::image('email@example.com'); // LaravelGravatar\Image instance $avatar = Gravatar::avatar('email@example.com'); // LaravelGravatar\Image instance $profile = Gravatar::profile('email@example.com'); // LaravelGravatar\Profile instance
或通过服务注入
use App\Models\User; use LaravelGravatar\Gravatar as Gravatar; class UserController { public function show(User $user, Gravatar $gravatar) { $avatar = $gravatar->avatar($user->email); $profile = $gravatar->profile($user->email); } }
检索Gravatar URL
只需使用 url()
方法。
$gravatar = gravatar('email@example.com'); $gravatarUrl = $gravatar->url(); $gravatar = Gravatar::avatar('email@example.com'); $gravatarUrl = $gravatar->url();
直接在视图中显示
由于类实现了 toString()
方法,因此可以直接使用实例。
<img src="{{ gravatar('email@example.com') }}"> <img src="{{ Gravatar::avatar('email@example.com') }}"> <img src="{{ $avatar }}">
必填参数
显然,电子邮件地址是必填参数,可以以不同的方式输入。
// pass it as argument of the helper $gravatarImage = gravatar($email); // or use the `setEmail()` method $gravatarImage = gravatar(); $gravatarImage->setEmail($email); // or the `email()` helper method $gravatarImage = gravatar(); $gravatarImage->email($email);
前面的示例也适用于个人资料。
可选参数
以下所有示例都将使用助手函数,但显然也适用于外观或服务的依赖注入。
Gravatar图片大小
默认情况下,如果没有提供大小参数,图片以80px x 80px的大小显示。您可以请求特定的图片大小,该大小将动态从Gravatar提供。您可以请求从1px到2048px的任何大小的图片,但是请注意,许多用户的图片分辨率较低,因此请求更大的尺寸可能会导致像素化/低质量图片。
头像大小应是一个表示像素大小的整数。
// use the `setSize()` method $gravatarImage = gravatar($email); $gravatarImage->setSize(120); // or the `size()` helper method $gravatarImage = gravatar($email); $gravatarImage->size(120); // or its alias `s()` (as in the generated query string) $gravatarImage = gravatar($email); $gravatarImage->s(120);
默认Gravatar图片
当电子邮件地址没有匹配的Gravatar图片,或者指定的gravatar超过了您允许的最大内容评级时会发生什么?
默认情况下,这是
如果您想使用自己的默认图像,可以通过提供图像的URL轻松实现。除了允许您使用自己的图像外,Gravatar 还提供了一些内置选项,您也可以将其作为默认选项使用。这些选项中的大多数通过获取请求的电子邮件哈希值并使用它生成一个与该电子邮件地址独特的主题图像。要使用这些选项,只需传递以下关键词之一
- '404':如果与电子邮件哈希值关联的图像不存在,则不加载任何图像,而是返回 HTTP 404(文件未找到)响应
- 'mp':(神秘人)一个简单的人物卡通剪影轮廓(不根据电子邮件哈希值变化)
- 'identicon':基于电子邮件哈希值的几何图案
- 'monsterid':具有不同颜色、面部等特征的生成的“怪物”
- 'wavatar':具有不同特征和背景的生成面部
- 'retro':惊人的生成,8位街机风格的像素化面部
- 'robohash':具有不同颜色、面部等特征的生成的机器人
- 'blank':透明的 PNG 图像
// use the `setDefaultImage()` method $gravatarImage = gravatar($email); $gravatarImage->setDefaultImage('mp'); // or the `defaultImage()` helper method $gravatarImage = gravatar($email); $gravatarImage->defaultImage('mp'); // or its alias `d()` (as in the generated query string) $gravatarImage = gravatar($email); $gravatarImage->d('mp');
Gravatar图片最大评级
Gravatar 允许用户对他们的图像进行自我评分,以便他们可以表示图像是否适合特定受众。默认情况下,仅显示“g”级图像,除非您指出您想查看更高评分。
您可以选择以下评分之一来请求包括该评分在内的图像
- 'g':适用于任何类型受众的所有网站的显示。
- 'pg':可能包含粗俗的手势、穿着挑逗的人、较轻的脏话或轻微的暴力。
- 'r':可能包含如严厉的脏话、强烈的暴力、裸露或硬毒品使用等事物。
- 'x':可能包含极端的色情图像或极其令人不安的暴力。
// use the `setMaxRating()` method $gravatarImage = gravatar($email); $gravatarImage->setMaxRating('g'); // or the `maxRating()` helper method $gravatarImage = gravatar($email); $gravatarImage->maxRating('g'); // or its alias `r()` (as in the generated query string) $gravatarImage = gravatar($email); $gravatarImage->r('g');
Gravatar图片文件类型扩展名
如果您需要文件类型扩展名(某些地方需要),您也可以指定它。
您可以为生成的 URL 指定以下扩展名之一
- 'jpg'
- 'jpeg'
- 'gif'
- 'png'
- 'webp'
// use the `setExtension()` method $gravatarImage = gravatar($email); $gravatarImage->setExtension('jpg'); // or the `extension()` helper method $gravatarImage = gravatar($email); $gravatarImage->extension('jpg'); // or its alias `e()` (as in the generated query string) $gravatarImage = gravatar($email); $gravatarImage->e('jpg');
强制使用默认图片
如果您出于某种原因想强制默认图像始终加载,您可以实现这一点
// use the `setForceDefault()` method $gravatarImage = gravatar($email); $gravatarImage->setForceDefault(true); // or the `forceDefault()` helper method $gravatarImage = gravatar($email); $gravatarImage->forceDefault(true); // or its alias `f()` (as in the generated query string) $gravatarImage = gravatar($email); $gravatarImage->f(true); // or use the `enableForceDefault()` method $gravatarImage = gravatar($email); $gravatarImage->setForceDefault(true);
要检查是否正在强制加载默认图像,请调用 LaravelGravatar\Image
的 forcingDefault()
方法,该方法将返回一个布尔值,表示是否启用了强制默认。
$gravatarImage = gravatar(); $gravatarImage->enableForceDefault(); //... $gravatarImage->forcingDefault(); // true //... $gravatarImage->disableForceDefault(); //... $gravatarImage->forcingDefault(); // false
组合它们
您可以将它们无缝组合
$avatar = gravatar('email@example.com') ->size(120) ->rating('pg') ->defaultImage('robohash') ->extension('jpg');
图片预设
您可以定义一组默认参数,称为预设。如果您在整个应用程序中使用标准设置,这将很有用。在配置文件中,您可以定义您想要的任何数量的 Gravatar 预设以及要使用的默认预设。
首先,使用 artisan 发布包的配置文件
php artisan vendor:publish --tag="gravatar-config"
然后在配置文件中的 'presets' 数组中定义一些预设。配置文件中有一些预定义的预设示例,但您当然可以删除它们并定义适合您需求的预设。例如
'my_default' => [ 'size' => 80, 'default_image' => 'mp', 'max_rating' => 'g', 'extension' => 'webp', ], 'small' => [ 'size' => 40, 'extension' => 'jpg', ], 'medium' => [ 'size' => 120, 'extension' => 'jpg', ], 'large' => [ 'size' => 360, 'default_image' => 'robohash', 'max_rating' => 'pg', ],
在配置文件中,对于值键名,因为这些是数组键,我们遵循命名约定,您可以使用以下任一项
'size'
或's'
'default_image'
或'd'
'max_rating'
或'r'
'extension'
或'e'
'force_default'
或'f'
如果您愿意,可以在配置文件顶部默认使用这些预设之一。
'default_preset' => 'my_default',
然后,在应用程序中使用第二个参数使用它
$gravatarImage = gravatar($email, 'small'); $gravatarImage = gravatar()->image($email, 'medium'); $gravatarImage = Gravatar::image($email, 'large');
或者您可以在实例化后稍后设置它
// use the `setPreset()` method $gravatarImage = gravatar($email); $gravatarImage->setPreset('small'); // or the `preset()` helper method $gravatarImage = gravatar($email); $gravatarImage->preset('small');
类型转换
让我们假设您的用户模型有一个名为“gravatar”的列,它表示要使用的电子邮件。您可以直接将此属性转换为 LaravelGravatar\Image
实例
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use LaravelGravatar\Casts\GravatarImage; class User extends Model { protected $casts = [ 'gravatar' => GravatarImage::class, ]; }
因此,您可以轻松访问该实例并对其进行操作
use App\Models\User; class UserController { public function show(User $user) { $user->gravatar->preset('small'); return view('users.show', [ 'user' => $user, ]); } }
您甚至可以定义一个预设名称,当进行广播时将其名称附加到广播上
use LaravelGravatar\Casts\GravatarImage; class Post extends Model { protected $casts = [ 'gravatar' => GravatarImage::class.':small', ]; }
您还可以广播到 LaravelGravatar\Profile
的一个实例
use LaravelGravatar\Casts\GravatarProfile; class User extends Model { protected $casts = [ 'gravatar' => GravatarProfile::class, ]; }