artisanpack-ui/core
Unifies configuration for all ArtisanPack UI packages into one config/artisanpack.php file. Publish a base config and use artisanpack:scaffold-config to auto-detect and merge settings while preserving customizations, with an optional --force override for keys.
Install the package:
composer require artisanpack-ui/core
This registers the CoreServiceProvider automatically.
Publish the base config:
php artisan vendor:publish --tag=artisanpack-config
Creates config/artisanpack.php (empty initially).
Scaffold configurations from installed ArtisanPack UI packages:
php artisan artisanpack:scaffold-config
Merges all package configs into artisanpack.php while preserving existing customizations.
Accessing unified configurations:
// In a controller or service
$cmsSettings = config('artisanpack.cms-framework.settings');
$siteTitle = config('artisanpack.cms-framework.settings.site_title', 'Default Title');
artisanpack-ui/cms-framework).artisan artisanpack:scaffold-config) to auto-merge configs.config/artisanpack.php with custom values:
return [
'cms-framework' => [
'settings' => [
'site_title' => 'My Site',
'theme' => 'dark',
],
],
'visual-editor' => [
'autosave_interval' => 300,
],
];
For new ArtisanPack UI packages:
// app/Providers/MyPackageServiceProvider.php
use ArtisanPackUI\Core\ArtisanPackServiceProvider;
class MyPackageServiceProvider extends ArtisanPackServiceProvider
{
protected $configFile = 'my-package';
protected $configKey = 'my-package';
protected $configPublishTag = 'my-package-config';
public function registerPackageBindings()
{
$this->app->singleton('my-package', function () {
return new MyPackageManager();
});
}
}
$allConfigs = config('artisanpack');
$editorConfig = config('artisanpack.visual-editor');
$interval = config('artisanpack.visual-editor.autosave_interval', 60);
Register reusable directives in a service provider:
use ArtisanPackUI\Core\Facades\ArtisanPackBlade;
public function boot()
{
ArtisanPackBlade::directive('myDirective', function ($expression) {
return "<?php echo 'Processed: ' . {$expression}; ?>";
});
}
Use in Blade:
@myDirective($variable)
Leverage the shared logger:
use ArtisanPackUI\Core\Facades\ArtisanPackLog;
ArtisanPackLog::info('User updated CMS settings', [
'user_id' => 123,
'package' => 'cms-framework',
]);
// Audit logs (compliance events)
ArtisanPackLog::audit('cms_content_published', [
'content_id' => 456,
'author' => 'admin',
]);
Extend the base test case:
use ArtisanPackUI\Core\Testing\ArtisanPackTestCase;
class MyPackageTest extends ArtisanPackTestCase
{
public function test_config_merged()
{
$this->assertConfigEquals([
'cms-framework' => [
'settings' => [
'site_title' => 'My Site',
],
],
]);
}
}
Configuration Overrides:
--force flag in artisanpack:scaffold-config overwrites existing keys. Use cautiously in production.config/artisanpack.php after scaffolding to spot unintended merges.Package Detection:
artisanpack-config are auto-detected. Verify with:
php artisan artisanpack:diagnose
Facade Availability:
ArtisanPackLog throw ServiceException if the underlying service isn’t bound. Check with:
if (ArtisanPackLog::isAvailable()) {
ArtisanPackLog::info('Safe to log');
}
Blade Directive Conflicts:
ArtisanPackBlade::directive('myDirective', ...);
// Throws if 'myDirective' is already registered.
Laravel Version Mismatches:
illuminate/support constraints.php artisan artisanpack:check-compatibility to detect version conflicts.Diagnose Issues:
php artisan artisanpack:diagnose --json
Outputs structured checks for environment, configs, and bindings.
Validate Configs:
Use the ConfigurationManager facade:
use ArtisanPackUI\Core\Facades\ArtisanPackConfig;
$result = ArtisanPackConfig::validate('cms-framework', [
'settings.site_title' => 'required|string',
]);
Log Inspection:
Audit logs are stored in storage/logs/artisanpack_audit.log (if enabled). Enable via:
'artisanpack' => [
'core' => [
'logging' => [
'audit' => [
'enabled' => true,
],
],
],
];
Custom Configuration Schemas: Register validation rules for package-specific configs:
ArtisanPackConfig::registerSchema('cms-framework', [
'settings.site_title' => ['required', 'string', 'max:255'],
'settings.theme' => ['in:light,dark,modern'],
]);
Dynamic Blade Directives:
Extend BladeDirectiveRegistrar to add dynamic directives:
ArtisanPackBlade::conditional('ifAdmin', function ($expression) {
return "<?php if(auth()->check() && auth()->user()->is_admin): ?>";
});
Package-Specific Logging Channels:
Override the default channel in config/artisanpack.php:
'core' => [
'logging' => [
'channel' => 'stack', // or 'single', 'custom_channel'
],
];
Custom Diagnostics:
Add checks to the DiagnosticRunner:
$runner = app(DiagnosticRunner::class);
$runner->addCheck(new MyCustomCheck());
Configuration Caching:
Laravel’s config caching (config:cache) works seamlessly with artisanpack.php. Clear with:
php artisan config:clear
after manual config changes.
Update Checks:
Cache TTL for artisanpack:check-updates is configurable:
'core' => [
'updates' => [
'cache_ttl' => 7200, // 2 hours
],
];
Service Provider Upgrade:
Replace custom providers with ArtisanPackServiceProvider:
// Before
class MyProvider extends ServiceProvider { ... }
// After
class MyProvider extends ArtisanPackServiceProvider { ... }
Accessibility Helpers:
Move a11y() functions to artisanpack-ui/accessibility:
composer require artisanpack-ui/accessibility
Testing:
Replace TestCase with ArtisanPackTestCase for built-in assertions:
$this->assertPackageInstalled('artisanpack-ui/cms-framework');
How can I help you explore Laravel packages today?