Snippet pass all data to child

in index.php

$my_data['a'] = "some a"; 
$my_data['z'] = "some z"; // Lot of stuff
return page('tpl-list')->render($my_data);

in tpl-list I want to pass through the whole big $my_data to the child snippet…

<?php snippet('a-partial', ... )?>

How do I manage that?

Use a controller to build up the data. You can pass that on to the snippet in the template.

It would be helpful to see in what context you are generating the data array. What is index.php?

i have an old Kirby2 plugin here, which I want to migrate to Kirby 4. The index.php is the entry point for the plugin, and holds - among other things - all the routes like so:

<?php

Kirby::plugin('my/plugin', [
        [
            'pattern' => URL_BASE . 'list/(:any)',
            'method' => 'GET',
            'action' => function ($filter) {
                include (PATH_ROUTES . 'get-list');
                return page('tpl-list')->render($data);
            } ,
        ],
]);

get-list.php (a sort of controller) creates the data (so far) in a global scope like so:

<?php

$data['field_a'] = 'field a';
$data['field_z'] = 'field z';

tpl-list.php uses the data:

<!-- This is fine -->
<p><?=$field_a;</p>

<!-- this seems impractical with many parameters -->
<?php snippet('partial', ['field_a' => $field_a, 'field_z' => $field_z])?>
<!-- What is the best way to pass all parameters from $data here? -->

Many thanks for your support.

With a little trick, this should work:

 [
            'pattern' => URL_BASE . 'list/(:any)',
            'method' => 'GET',
            'action' => function ($filter) {
                include (PATH_ROUTES . 'get-list');
                $data = ['data' => $data];

                return page('tpl-list')->render($data);
            } ,
        ],

The in your controller:

return function ($page, $data) {
	return [
		'data'   => $data,
	];
	
};

Like that you have access to the complete array and can pass it to the snippet.

I am now renovating the code so that I use Kirby Controller.