Install via Composer:
composer require austral/tools-bundle
Ensure your config/bundles.php includes:
Austral\ToolsBundle\AustralToolsBundle::class => ['all' => true],
First Use Case:
{{ dump(austral_tools.uuid()) }} {# Generates a UUID #}
{{ austral_tools.dot_notation('user.address.city') }} {# Dot notation parsing #}
php bin/console austral:tools:generate-uuid
Where to Look First:
Austral\ToolsBundle\Twig\AustralToolsExtension for available filters/functions.Austral\ToolsBundle\Abstracts\AbstractTool for reusable logic patterns.Reusable Tool Logic:
Extend AbstractTool to create domain-specific utilities:
namespace App\Tools;
use Austral\ToolsBundle\Abstracts\AbstractTool;
class UserTool extends AbstractTool
{
public function formatName(string $firstName, string $lastName): string
{
return ucfirst($firstName) . ' ' . strtoupper($lastName);
}
}
Register in services.yaml:
services:
App\Tools\UserTool: ~
Twig Integration: Use the bundle’s Twig extensions for frontend logic:
{# Format a date with custom rules #}
{{ austral_tools.format_date('2024-07-24', 'Y-m-d H:i') }}
{# Serialize complex objects #}
{{ austral_tools.serialize(user) | raw }}
Dot Notation Parsing: Parse nested arrays/objects dynamically:
$value = austral_tools.dot_notation('user.profile.settings.notifications', $data);
UUID Generation: Generate UUIDs in controllers or services:
use Austral\ToolsBundle\Services\UuidService;
class UserController extends Controller
{
public function __construct(private UuidService $uuidService) {}
public function create()
{
$uuid = $this->uuidService->generate();
// Use $uuid in your logic
}
}
Console Automation: Leverage built-in commands for repetitive tasks:
# Generate UUIDs in bulk
php bin/console austral:tools:generate-uuid --count=10
# Validate YAML files
php bin/console austral:tools:validate-yaml path/to/file.yaml
KernelEvents::TERMINATE) for post-processing.AustralToolsExtension or UuidService in services/controllers.AustralToolsExtension to add project-specific Twig functions:
public function getFunctions()
{
return [
new \Twig\TwigFunction('custom_function', [$this, 'customFunction']),
];
}
Namespace Collisions:
The bundle’s AbstractTool may conflict with existing Tool classes. Rename or alias if needed:
services:
Austral\ToolsBundle\Abstracts\AbstractTool: alias: austral.tools.abstract_tool
Twig Auto-Reloading: Clear Twig cache after adding new extensions:
php bin/console cache:clear
UUID Generation:
UuidService uses ramsey/uuid. Ensure your PHP version (8.0+) supports it.Dot Notation Edge Cases:
null values may throw exceptions. Validate input:
if (empty($data['user']['profile'])) {
return null;
}
Doctrine Extensions:
The bundle requires gedmo/doctrine-extensions. Install separately if missing:
composer require gedmo/doctrine-extensions
Twig Errors:
Enable Twig debug mode in config/packages/twig.yaml:
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
Check var/log/dev.log for Twig-specific errors.
Console Command Issues:
Use --verbose for detailed output:
php bin/console austral:tools:generate-uuid --verbose
Environment Variables:
The bundle uses symfony/dotenv. Ensure .env files are loaded:
// config/packages/framework.yaml
framework:
env:
enabled: true
YAML Validation:
The validate-yaml command may fail on malformed files. Pre-validate with:
php bin/console debug:container Austral\ToolsBundle\Validator\YamlValidator
Custom Abstract Tools:
Override AbstractTool methods like sanitizeInput() for project-specific validation.
Twig Extensions:
Subclass AustralToolsExtension to add filters:
class CustomAustralToolsExtension extends AustralToolsExtension
{
public function getFilters()
{
return [
new \Twig\TwigFilter('custom_filter', [$this, 'customFilter']),
];
}
}
Register in services.yaml:
services:
App\Twig\CustomAustralToolsExtension:
tags: ['twig.extension']
Console Commands:
Extend AustralToolsCommand to add custom logic:
namespace App\Command;
use Austral\ToolsBundle\Command\AustralToolsCommand;
class CustomToolCommand extends AustralToolsCommand
{
protected function configure()
{
$this->setName('app:custom-tool');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// Custom logic
}
}
Serializer Groups:
Configure symfony/serializer groups in config/packages/serializer.yaml:
framework:
serializer:
mapping:
paths: ['%kernel.project_dir%/config/serializer']
Create config/serializer/AustralTools.yaml:
Austral\ToolsBundle\Dto\ExampleDto:
attributes:
id:
groups: ['api']
How can I help you explore Laravel packages today?