GenerateIdeHelpers Command
The custom-field:ide artisan command generates IDE helper stubs for CustomFieldBuilder macros. This provides autocomplete and type hints for dynamically registered field types in your IDE, making development faster and more reliable.
Namespace
JobMetric\CustomField\Commands\GenerateIdeHelpers
Command Signature
php artisan custom-field:ide
Overview
Laravel Custom Field uses Laravel's Macroable trait to dynamically register field types. While this provides flexibility, IDEs cannot provide autocomplete for these dynamic methods. The custom-field:ide command solves this by generating a helper file that documents all registered field types, enabling full IDE support.
Basic Usage
Generate IDE Helpers
Simply run the command:
php artisan custom-field:ide
Output:
IDE helper generated: /path/to/project/_ide_helper_custom_field.php
Generated File Location
The helper file is generated at:
{project_root}/_ide_helper_custom_field.php
Generated File Structure
File Content
The generated file contains PHPDoc annotations for all registered field types:
<?php
namespace JobMetric\CustomField;
/**
* This file is auto-generated by custom-field:ide
* It provides dynamic method hints for IDEs.
*
* @method static \JobMetric\CustomField\CustomFields\Text\Text text()
* @method static \JobMetric\CustomField\CustomFields\Number\Number number()
* @method static \JobMetric\CustomField\CustomFields\Email\Email email()
* @method static \JobMetric\CustomField\CustomFields\Select\Select select()
* @method static \JobMetric\CustomField\CustomFields\Radio\Radio radio()
* @method static \JobMetric\CustomField\CustomFields\Color\Color color()
* @method static \App\CustomFields\ColorPicker\ColorPicker colorPicker()
* @method static \App\CustomFields\RichTextEditor\RichTextEditor richTextEditor()
*/
class CustomFieldBuilder
{
// This class is intentionally left empty. Its purpose is to provide IDE hints for dynamically registered macros.
}
Method Documentation
Each @method annotation follows this pattern:
@method static {FullyQualifiedClassName} {methodName}()
Components:
static: Indicates a static method{FullyQualifiedClassName}: The fully qualified class name of the field{methodName}(): The camelCase method name (derived from field type)
Example:
@method static \JobMetric\CustomField\CustomFields\Text\Text text()
This means:
- Method:
CustomFieldBuilder::text() - Returns:
JobMetric\CustomField\CustomFields\Text\Text
How It Works
Discovery Process
- Registry Access: The command accesses
CustomFieldRegistryto get all registered fields - Field Iteration: Iterates through all registered field instances
- Type Extraction: Gets the field type using
FieldContract::type() - Method Name Generation: Converts type to camelCase for method name
- Class Name Resolution: Gets the fully qualified class name
- Documentation Generation: Creates PHPDoc annotations
Method Name Conversion
Field types are converted to camelCase method names:
Type to Method:
text→text()color-picker→colorPicker()rich-text-editor→richTextEditor()date_time_picker→dateTimePicker()
Conversion Logic:
$method = Str::camel($type);
Class Name Resolution
The command uses get_class() to get the fully qualified class name:
$fqcn = '\\' . ltrim(get_class($field), '\\');
Examples:
JobMetric\CustomField\CustomFields\Text\TextApp\CustomFields\ColorPicker\ColorPicker
Complete Examples
Example 1: Basic Usage
php artisan custom-field:ide
Generated File:
<?php
namespace JobMetric\CustomField;
/**
* This file is auto-generated by custom-field:ide
* It provides dynamic method hints for IDEs.
*
* @method static \JobMetric\CustomField\CustomFields\Text\Text text()
* @method static \JobMetric\CustomField\CustomFields\Number\Number number()
* @method static \JobMetric\CustomField\CustomFields\Email\Email email()
* @method static \JobMetric\CustomField\CustomFields\Select\Select select()
* @method static \JobMetric\CustomField\CustomFields\Radio\Radio radio()
*/
class CustomFieldBuilder
{
// This class is intentionally left empty. Its purpose is to provide IDE hints for dynamically registered macros.
}
Example 2: With Custom Fields
After registering custom fields:
// In AppServiceProvider
$registry = app('CustomFieldRegistry');
$registry->register(new \App\CustomFields\ColorPicker);
$registry->register(new \App\CustomFields\RichTextEditor);
Run the command:
php artisan custom-field:ide
Generated File:
<?php
namespace JobMetric\CustomField;
/**
* This file is auto-generated by custom-field:ide
* It provides dynamic method hints for IDEs.
*
* @method static \JobMetric\CustomField\CustomFields\Text\Text text()
* @method static \JobMetric\CustomField\CustomFields\Select\Select select()
* @method static \App\CustomFields\ColorPicker\ColorPicker colorPicker()
* @method static \App\CustomFields\RichTextEditor\RichTextEditor richTextEditor()
*/
class CustomFieldBuilder
{
// This class is intentionally left empty. Its purpose is to provide IDE hints for dynamically registered macros.
}
IDE Support
PHPStorm / IntelliJ IDEA
PHPStorm automatically recognizes the generated helper file and provides:
- Autocomplete: Method suggestions when typing
CustomFieldBuilder:: - Type Hints: Return type information for each method
- Go to Definition: Navigate to the actual field class
- Refactoring: Safe renaming and refactoring support
Usage:
use JobMetric\CustomField\CustomFieldBuilder;
// IDE will autocomplete: text(), select(), colorPicker(), etc.
$field = CustomFieldBuilder::text()
->name('email')
->build();
Visual Studio Code
With PHP Intelephense or PHP IntelliSense extensions:
- Autocomplete: Method suggestions
- Type Checking: Type validation
- Hover Information: Show method signatures
Other IDEs
Most modern PHP IDEs that support PHPDoc annotations will benefit from the generated helper file.
When to Regenerate
After Registering New Fields
Whenever you register a new custom field, regenerate the helpers:
// Register new field
$registry->register(new \App\CustomFields\MyNewField);
// Regenerate helpers
php artisan custom-field:ide
After Package Updates
If you update the laravel-custom-field package and new default fields are added:
composer update jobmetric/laravel-custom-field
php artisan custom-field:ide
In Development Workflow
Include in your development workflow:
# After creating a new field
php artisan custom-field:make MyField
php artisan custom-field:ide
# Or add to composer scripts
"post-autoload-dump": [
"@php artisan custom-field:ide"
]
Integration with Composer
Automatic Generation
Add to your composer.json scripts:
{
"scripts": {
"post-autoload-dump": [
"@php artisan custom-field:ide"
]
}
}
This automatically regenerates helpers after:
composer installcomposer updatecomposer dump-autoload
Package Integration
The laravel-custom-field package includes this in its own scripts:
{
"scripts": {
"post-install-cmd": [
"@php scripts/generate_ide_if_local.php"
],
"post-update-cmd": [
"@php scripts/generate_ide_if_local.php"
],
"post-autoload-dump": [
"@php scripts/generate_ide_if_local.php"
]
}
}
File Management
Git Integration
Recommended: Add to .gitignore:
# IDE Helper files
_ide_helper_custom_field.php
Why?
- File is auto-generated
- Content varies by registered fields
- Can be regenerated anytime
Alternative: Commit the file if you want consistent IDE support across the team.
File Location
The file is generated at the project root:
{project_root}/
├── _ide_helper_custom_field.php
├── app/
├── config/
└── ...
Note: This location is hardcoded in the command. To change it, you would need to modify the command class.
Troubleshooting
IDE Not Recognizing Helpers
If your IDE doesn't provide autocomplete:
- Check File Exists: Verify
_ide_helper_custom_field.phpexists - Regenerate: Run
php artisan custom-field:ideagain - IDE Cache: Clear IDE cache and restart
- Namespace: Ensure the namespace matches
JobMetric\CustomField - Composer Autoload: Run
composer dump-autoload
Missing Custom Fields
If your custom fields don't appear in the generated file:
- Check Registration: Ensure fields are registered before running the command
- Service Provider Order: Ensure registration happens in
boot()method - Run After Registration: Run the command after all fields are registered
Outdated Helpers
If helpers are outdated:
- Regenerate: Run
php artisan custom-field:ide - Check Registration: Verify all fields are registered
- Clear Cache: Clear any IDE or application cache
Best Practices
- Regenerate Regularly: Run after registering new fields
- Automate: Add to composer scripts for automatic generation
- Version Control: Consider adding to
.gitignoreif auto-generated - Document: Inform team members about the helper file
- CI/CD: Include regeneration in your deployment process if needed
Advanced Usage
Custom Generation Script
Create a custom script for your workflow:
<?php
// scripts/generate-custom-field-helpers.php
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
$app->make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap();
Artisan::call('custom-field:ide');
echo "Custom field IDE helpers generated!\n";
Run with:
php scripts/generate-custom-field-helpers.php
Integration with Other IDE Helpers
If you use other IDE helper packages (like barryvdh/laravel-ide-helper), you can combine them:
{
"scripts": {
"post-autoload-dump": [
"@php artisan ide-helper:generate",
"@php artisan custom-field:ide"
]
}
}