Validation is ready.

This commit is contained in:
2023-12-03 00:46:06 +06:00
parent 250c1a9f8d
commit c39f6ba4d7
5 changed files with 201 additions and 0 deletions

60
src/CaptchaProvider.php Normal file
View File

@@ -0,0 +1,60 @@
<?php declare(strict_types=1);
namespace korElf\CaptchaRuleForLaravel;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Blade;
use Illuminate\Contracts\Foundation\Application;
final class CaptchaProvider extends ServiceProvider
{
public function boot(): Void
{
$this->addValidationRule();
$this->publishes([
__DIR__ . '/../config/captcha.php' => config_path('captcha.php'),
], 'config');
if (config('captcha.enable_blade_captcha')) {
Blade::directive('captcha', function () {
return "<?php echo \korElf\CaptchaRuleForLaravel\htmlCaptcha(); ?>";
});
}
}
/**
* Extends Validator to include a captcha type
*/
public function addValidationRule(): Void
{
$message = trans(config('captcha.error_message_key'));
Validator::extendImplicit(config('captcha.rule_name'), function ($attribute, $value) {
if (!is_string($value)) {
return false;
}
return app(CaptchaService::class)->validate($value, request()->userAgent());
}, $message);
}
/**
* Register the service provider.
*
* @return void
*/
public function register(): Void
{
$this->mergeConfigFrom(
__DIR__ . '/../config/captcha.php',
'captcha'
);
$this->app->singleton(CaptchaService::class, function (Application $app) {
return new CaptchaService(
privateToken: config('captcha.api_private_token', ''),
domainApi: config('captcha.api_domain', ''),
curlTimeout: config('captcha.curl_timeout', ''),
);
});
}
}