class atk4\ui\Tabs


Tabs implement a yet another way to organise your data. The implementation is based on:


Basic Usage

Once you create Tabs container you can then mix and match static and dynamic tabs:

$tabs = $app->add('Tabs');

Adding a static conten is pretty simple:

$tabs->addTab('Static Tab')->add('LoremIpsum');

You can add multiple elements into a single tab, like any other view.

atk4\ui\Tabs::addTab($name, $action)

Use addTab() method to add more tabs in Tabs view. First parameter is a title of the tab.

Tabs can be static or dynamic. Dynamic tabs use VirtualPage implementation mentioned above. You should pass callable action as a second parameter.


$t = $layout->add('Tabs');

// add static tab $t->addTab(‘Static Tab’)->add(‘HelloWorld’);

// add dynamic tab $t->addTab(‘Dynamically Loading’, function ($tab) {



Dynamic Tabs

Dynamic tabs are based around implementation of VirtualPage and allow you to pass a call-back which will be triggered when user clicks on the tab.

Note that tab contents are refreshed including any values you put on the form:

$t = $app->add('Tabs');

// dynamic tab
$t->addTab('Dynamic Lorem Ipsum', function ($tab) {
    $tab->add(['LoremIpsum', 'size'=>2]);

// dynamic tab
$t->addTab('Dynamic Form', function ($tab) {
    $m_register = new \atk4\data\Model(new \atk4\data\Persistence_Array($a));
    $m_register->addField('name', ['caption'=>'Please enter your name (John)']);

    $f = $tab->add(new \atk4\ui\Form(['segment'=>true]));
    $f->onSubmit(function ($f) {
        if ($f->model['name'] != 'John') {
            return $f->error('name', 'Your name is not John! It is "'.$f->model['name'].'". It should be John. Pleeease!');