Support for using config variables in yaml config
Description
Before migrating to v5 we could use dynamic audience_id based on our environment using the env:
'audience_id' => env('MAILCHIMP_AUDIENCE_ID'),
After upgrading I wanted to accomplish the same using the config, but it breaks everything because the config value isn't being replaced
audience_id: '{{ config:mailchimp:audience_id }}'
Taken from API call:
"lists/{{ config:mailchimp:audience_id }}"
Steps to reproduce
- Add
audience_idto mailcihmp.php config'audience_id' => env('MAILCHIMP_AUDIENCE_ID'), - Change
audience_idin newsletter.yaml to use configaudience_id: '{{ config:mailchimp:audience_id }}' - Navigate to
/cp/forms/newsletter/edit - See that you get a fatal error
StatamicRadPack\Mailchimp\Fieldtypes\MailchimpField::callApi(): Return value must be of type ?array, bool returned
Environment
Environment Application Name: Odeon Laravel Version: 10.48.27 PHP Version: 8.2.26 Composer Version: 2.8.4 Environment: local Debug Mode: ENABLED URL: odeon.test Maintenance Mode: OFF
Cache Config: NOT CACHED Events: NOT CACHED Routes: NOT CACHED Views: CACHED
Drivers Broadcasting: log Cache: redis Database: mysql Logs: stack / daily Mail: smtp Queue: sync Session: redis
Statamic Addons: 5 Sites: 1 Stache Watcher: Disabled Static Caching: Disabled Version: 5.46.0 PRO
Statamic Addons edalzell/forma: 3.0.1 jacksleight/statamic-bard-mutator: 3.0.3 pecotamic/sitemap: 1.4.7 rias/statamic-redirect: 3.9.3 statamic-rad-pack/mailchimp: 5.2.2
We'd need to do some Antlers::parse()-ing here:
https://github.com/statamic-rad-pack/mailchimp/blob/3e8e49e54fa4b3e7f947763fa5b81df657c44bb3/src/ServiceProvider.php#L93-L95
Passing in the config values.
If its something you need feel free to open a PR and we'll review it.
@ryanmitchell would it make sense to also "lock" the UI like with the API key so you can't select another list?
Why? The point of the field is its selectable.
It's just that other fields in the system get locked when using a config or environment variable.
@ryanmitchell I'm stuck at the display and the "fix" doesn't feel right...
In StatamicRadPack\Mailchimp\ServiceProvider like you suggested:
'id' => (string) Antlers::parse(Arr::get($data, 'audience_id'), ['config' => config()->all()]),
But then also in StatamicRadPack\Mailchimp\Fieldtypes\MailchimpAudience:
$id = (string) Antlers::parse($id, ['config' => config()->all()]);
if (! $list = $this->callApi("lists/{$id}")) {
return [];
}
Things don't blow up, but the form is still seeing the config value, which I guess is also why the fieldtype change is needed.
Yep looks like more is needed than what I suggested. Did you look around core to see how its handled there?
The closest I got was looking at Statamic\Forms\Email but I can't figure out if the Mailchimp addon explicitly setup the values for the additional form fields.
@ryanmitchell looks like it's something that needs to be added to the core - most likely in Statamic\Forms\Form::hydrate()