beloop/typeform
Read-only Typeform component from the Beloop LMS components suite. Provides Typeform integration as part of the broader beloop/components project (Symfony-based) under the MIT license. For support and contributions, use beloop/components.
Installation Ensure your project meets the PHP 7.2+ requirement (BREAKING CHANGE in v1.0). Add the package via Composer (if available in a private repo or fork):
composer require beloop/typeform
Note: Since the package is archived and not on Packagist, ensure you have access to the source (e.g., Git subtree or private repo).
Service Provider & Facade
Register the service provider in config/app.php:
'providers' => [
Beloop\Typeform\TypeformServiceProvider::class,
],
Publish config (if available):
php artisan vendor:publish --provider="Beloop\Typeform\TypeformServiceProvider"
First Use Case: Fetching a Form Use the facade to retrieve a Typeform form by ID:
use Beloop\Typeform\Facades\Typeform;
$form = Typeform::form('your_form_id')->get();
Form Management
$form = Typeform::form()->create([
'title' => 'Customer Survey',
'fields' => [...],
]);
$forms = Typeform::forms()->all();
Submission Handling
$submissions = Typeform::form('form_id')->submissions()->all();
Route::post('/typeform-webhook', [TypeformWebhookController::class, 'handle']);
Use the package to validate payloads:
$payload = Typeform::validateWebhook(request()->all());
Field-Specific Logic
$emailField = Typeform::form('form_id')->field('email')->get();
Cache::remember).try-catch blocks for Beloop\Typeform\Exceptions\TypeformException.Typeform facade in unit tests:
$this->partialMock(Beloop\Typeform\Facades\Typeform::class, function ($mock) {
$mock->shouldReceive('form')->andReturnSelf();
$mock->shouldReceive('get')->andReturn($formData);
});
Deprecated API
/forms vs /forms?page_size=100) in the Typeform API docs.No Official Documentation
vendor/beloop/typeform/src/) for undocumented features.Webhook Validation
secret_key. Ensure it’s set in config:
'webhook_secret' => env('TYPEFORM_WEBHOOK_SECRET'),
PHP Version Requirement (v1.0)
Typeform::setDebug(true); // Logs API requests/responses
TYPEFORM_API_TOKEN in .env.use Symfony\Component\HttpClient\RetryableHttpClient;
$client = new RetryableHttpClient(
HttpClient::create(['base_uri' => 'https://api.typeform.com']),
[
'max_retries' => 3,
'delay_factor' => 100,
]
);
Custom API Clients Override the default HTTP client in the service provider:
$this->app->singleton(\Http\Client\Common\ClientInterface::class, function () {
return new \GuzzleHttp\Client(['base_uri' => 'https://api.typeform.com']);
});
Event Listeners
Extend submission handling by listening to typeform.submission.received events (if supported).
Form Builder Create a Laravel form builder wrapper:
class TypeformBuilder {
public function __construct(private Typeform $typeform) {}
public function build(array $fields) {
return $this->typeform->form()->create($fields);
}
}
.env includes:
TYPEFORM_API_TOKEN=your_token_here
TYPEFORM_WEBHOOK_SECRET=your_webhook_secret
https://api.typeform.com/v1. Override in config:
'api' => [
'base_uri' => 'https://api.typeform.com/v2', // Example override
],
->paginate(100) for large datasets to avoid memory issues.How can I help you explore Laravel packages today?