Low-code Framework for Web Apps in PHP


Agile UI - User Interface framework for Agile Toolkit

Agile Toolkit is a Low Code framework written in PHP. Agile UI implement server side rendering engine and over 50 UI generic components for interacting with your Data Model.

Agile UI is quickest way for building back-end UI, admin interfaces, data management systems for medium and large projects designed around roles, complex logic, formulas.

  • Agile UI relies on abstract data. It could be stored in SQL, NoSQL or in external API.
  • Agile UI adjusts to your data model. If you change your model structure, UI will reflect that.
  • Agile UI offers out-of-the-box components, you don't need front-end development experience.
  • Agile UI is interactive, making it very easy to trigger PHP code on JS events.
  • Agile UI is compact - single file, several lines of code - that's all it takes.
  • Agile UI is extensible - integrates VueJS for custom components and interactive behaviours.

Build CodeCov GitHub release Code Climate Codefresh build status

Quick-Links: Documentation. Namespaces. Demo-site. ATK Data. Forum. Chat. Commercial support. Udemy Course.

Our localization is done using the amazing services of Lokalise.com (Thanks)

How does Agile Toolkit work?

The goal of Agile Toolkit is to reduce amount of coding to build general purpose web applications. There are three steps involved:

  1. Define your "Data Model" through Agile Data Framework and associate with SQL, NoSQL or API.
  2. Initialize UI components, connecting them to Data Model to build User Interface for your application.
  3. If needed - Use Agile API to provide API access for your Mobile/React app or IoT devices.

Agile Data allows you to define models, fields, relations, formulas, aggregates, expressions, user action and access control rules. Both Agile UI and Agile API will follow those rules.

Integrations and Apps using Agile UI

Agile UI can integrate with frameworks like Laravel or Symfony, has integration with Wordpress and there are several high-level projects developed entirely on Agile Toolkit.

Who uses Agile Toolkit?

Companies use Agile Toolkit to implement admin interface and in some cases even user-facing interface.

How does it work?

Download from www.agiletoolkit.org or Install ATK UI with composer require atk4/ui

Create "index.php" file with:

require_once __DIR__ . '/vendor/autoload.php';

$app = new \Atk4\Ui\App();   // That's your UI application

$form = \Atk4\Ui\Form::addTo($app); // Yeah, that's a form!

$form->addField('email');    // adds field
$form->onSubmit(function ($form) {
    // implement subscribe here

    return $form->success('Subscribed ' . $form->model->get('email') . ' to newsletter.');

// Decorate anything
$form->buttonSave->icon = 'mail';

// everything renders automatically

Open PHP in the browser and observe a fully working and good looking form:


ATK UI relies on https://fomantic-ui.com CSS framework to render the form beautifully. It also implements submission call-back in a very straightforward way. The demo also demonstrates use of JavaScript action, which can make objects interract with each-other (e.g. Form submit reloads Table).

Database Integration with ATK Data

To get most of ATK UI, use ATK Data to describe your business models such as "User" or "Purchase". When you define models, you can start using some more advanced components:

Crud is a fully-interractive component that supports pagination, reloading, conditions, data formatting, sorting, quick-search, ordering, custom actions and modals, but at the same time is very easy to use:

$app = new \Atk4\Ui\App('hello world');
$app->db = \Atk4\Data\Persistence::connect('mysql://user:[email protected]/atk');

\Atk4\Ui\Crud::addTo($app)->setModel(new User($app->db));

ATK Data allows you to set up relations between models:

class User extends Model {
    function init(): void {

        $this->addField('gender', ['enum'=>'female','male','other']);
        $this->hasMany('Purchases', ['model' => [Purchase::class]]);

Conventional Crud works only with a single model, but with add-on you can take advantage this relationship information: https://github.com/atk4/mastercrud

use \Atk4\Mastercrud\MasterCrud;

// set up $app here

$master_crud = MasterCrud::addTo($app);
$master_crud->setModel(new User($app->db), [

Agile UI can be styled

It's easy to create your own application styling. Here are some example UI:



As of version 2.0 - Agile Toolkit offers support for User Actions. Those are easy to define in your Data Model declaration:

$this->addAction('archive', function(Model $m) { $m->get('is_archived') = true; $this->saveAndUnload(); });

User interface such as Crud or Card will automatically recognize new action and offer user to execute it. You can also control who has permission to execute actions through our ACL system.

Agile UI Feature highlights

Agile UI has some unique features:

Callbacks. Callbacks everywhere!

One of the fundamental features of ATK is Callback - ability to dynamically generate a route then have JS part of the component invoke it. Thanks to this approach, code can be fluid, simple and readable:

$tabs = \Atk4\Ui\Tabs::addTo($app);
\Atk4\Ui\Message::addTo($tabs->addTab('Intro'), ['Other tabs are loaded dynamically!']);

$tabs->addTab('Users', function($p) use($app) {

    // This tab is loaded dynamically, but also contains dynamic component
    \Atk4\Ui\Crud::addTo($p)->setModel(new User($app->db));

$tabs->addTab('Settings', function($p) use($app) {

    // Second tab contains an AJAX form that stores itself back to DB.
    $m = new Settings($app->db);


Another component implementation using a very friendly PHP syntax:


You get most benefit when you use various ATK UI Components together. Try the following demo: https://ui.agiletoolkit.org/demos/interactive/wizard.php. The demo implements:

  • Multi-step wizard with ability to navigate forward and backward
  • Form with validation
  • Data memorization in the session
  • Table with column formatter, Messages
  • Real-time output console

With ATK it takes about 50 lines of PHP code only to build it all.

Getting Started: Build your admin

It's really easy to put together a complex Admin system. Add this code to a new PHP file (tweak it with your database details, table and fields):


$app = new \Atk4\Ui\App('My App');
$app->db = \Atk4\Data\Persistence::connect('mysql://user:[email protected]/yourdb');

class User extends \Atk4\Data\Model {
    public $table = 'user';
    function init(): void {

        $this->addField('email', ['required'=>true]);
        $this->addField('password', ['type'=>'password']);

\Atk4\Ui\Crud::addTo($app)->setModel(new User($app->db));

The result is here:

Bundled and Planned components

Agile UI comes with many built-in components:

All components can be view using the demos application.

Component Description Introduced
View Template, Render Tree and various patterns 0.1
Button Button in various variations including icons, labels, styles and tags 0.1
Input Decoration of input fields, integration with buttons. 0.2
JS Assign JS events and abstraction of PHP callbacks. 0.2
Header Simple view for header. 0.3
Menu Horizontal and vertical multi-dimensional menus with icons. 0.4
Form Validation, Interactivity, Feedback, Layouts, Field types. 0.4
Layouts Admin, Centered. 0.4
Table Formatting, Columns, Status, Link, Template, Delete. 1.0
Grid Toolbar, Paginator, Quick-search, Expander, Actions. 1.1
Message Such as "Info", "Error", "Warning" or "Tip" for easy use. 1.1
Modal Modal dialog with dynamically loaded content. 1.1
Reloading Dynamically re-render part of the UI. 1.1
Actions Extended buttons with various interactions 1.1
Crud Create, List, Edit and Delete records (based on Advanced Grid) 1.1
Tabs 4 Responsive: Admin, Centered, Site, Wide. 1.2
Loader Dynamically load itself and contained components inside. 1.3
Modal View Open/Load contained components in a dialog. 1.3
Breadcrumb Push links to pages for navigation. Wizard. 1.4
ProgressBar Interactive display of a multi-step PHP code execution progress 1.4
Console Execute server/shell commands and display progress live 1.4
Items and Lists Flexible and high-performance way to display lists of items. 1.4
Wizard Multi-step, wizard with temporary data storing. 1.4
Actions Vizualization of user-defined actions 2.0

Add-ons and integrations



All bundled components are free and licensed under MIT license. They are installed together with Agile UI.

External and 3rd party components may be subject to different licensing terms.

Documentation and Community

ATK UI makes active use of ATK Core and ATK Data frameworks.

ATK UI Schematic


Credits and License

Agile UI, Data and API are projects we develop in our free time and offer you free of charge under terms of MIT license. If you wish to say thanks to our core team or take part in the project, please contact us through our chat on Gitter.


  • Looking for a weekly meeting coordinator

    Looking for a weekly meeting coordinator

    I'm proposing to have a weekly meeting about all ATK things. I myself will participate but for the sake of encouraging 3rd party contributors and seeing ATK grow I'd like to appoint someone else as the meeting coordinator.

    A candidate responsibilities would be:

    • decide what date/time suits (mostly convenient for yourself!)
    • attend the meetings
    • decide on conferencing tool. Google Meet is an obvious choice for me, that's real good, but up to you.
    • if you wish - you can set some goals, agenda or collect minutes, but that's not important. The important is to have a chat, discuss things, share knowledge.
    • if you can't continue with the role - find replacement.

    We can try few candidates to see who can do this best.

    help wanted POLL 
    opened by romaninsh 37
  • Create proposal for UI translations

    Create proposal for UI translations

    Many of our users need non-english version of ATK. Also we need a guide for external add-ons, on how they should approach translations.

    • [ ] gettext implementations
    • [ ] php built-in gettext by default but with ability to switch?
    • [ ] requirements (plural(s), word positioning, etc)
    • [ ] what about VUE components (@ibelar)
    • [ ] documentation on how to translate in a new language
    • [ ] which languages we will support initially?
    • [ ] .. what else to consider?

    For now - need answers to the above questions. To be discussed in next hangout.

    enhancement :+1: hangout agenda :speaker: 
    opened by romaninsh 31
  • Rename FormField NS to Form\Control (and FormLayout to Form\Layout)

    Rename FormField NS to Form\Control (and FormLayout to Form\Layout)

    fixes #794

    Introduce Form namespace

    • Elegant and clear syntax when importing the atk4\ui\Form namespace only
    use atk4\ui\Form;
    new Form\Control\Checkbox();
    new Form\Layout\Columns();
    • removes duplicate class names like Generic

    • renames classes according to PSR

    • docs updated with explicit variable naming and new namespace importing for clarity, e.g. $group->addField('gender', [Form\Control\Dropdown::class, 'values' => ['Female', 'Male']]); $f -> $form, $gr -> $group, etc

    BC break:

    • instanceof operator returns false if tested against the old class names

    Autoload of old classes will trigger DEPRECATED warning


    Simple regex: (?<!\w)FormField(?!\w)

    Search/replace in files

    1. class FormField\Generic to Form\Control
    2. class FormLayout\Generic to Form\Layout
    3. namespace atk4\ui\FormField to atk4\ui\Form\Control
    4. namespace atk4\ui\FormLayout to Form\Layout
    5. class FormField\CheckBox to Form\Control\Checkbox (change of class name case only)
    6. class FormField\DropDown to Form\Control\Dropdown (change of class name case only)
    7. class FormField\DropDownCascade to Form\Control\DropdownCascade (change of class name case only)
    8. class FormField\MultiLine to Form\Control\Multiline (change of class name case only)
    9. class FormField\UploadImg to Form\Control\UploadImage
    10. class FormField\TextArea to Form\Control\Textarea (change of class name case only)
    MAJOR refactor BC-break RTM 
    opened by georgehristov 28
  • Fix #629, also add new Callback for custom HTML

    Fix #629, also add new Callback for custom HTML

    Adds property renderRowFunction, which can be used to pass custom html options to renderView for each option. If not defined, only needed title_field and id_field are used. (and system fields, they are also loaded when using only_fields()).

    in progress Documentation :books: 
    opened by PhilippGrashoff 27
  • AdminLayout is not working anymore with release 2.1

    AdminLayout is not working anymore with release 2.1

    After upgrading to ui 2.1.0 no applications of mine are working anymore because of a missing function called addToWithCIUnsafe in View.php


    I also tried with a complete new project, I cleared the cache of the composer and still the critical error with the missing function persists.

    bug :beetle: URGENT FIXED 
    opened by karakal 24
  • App::encodeJson(): catch case that preg_replace_callback fails

    App::encodeJson(): catch case that preg_replace_callback fails


    I recently managed (don't know how, but not too important) to get this error message:

    Bildschirmfoto von 2020-11-17 21-16-16

    Logic behind this seems that preg_replace_callback() returns null on failure. We should take care of this. I'd go for this, WDYT?

        public function encodeJson($data, bool $forceObject = false): string
            if ($forceObject) {
                $options |= JSON_FORCE_OBJECT;
            $json = json_encode($data, $options | JSON_THROW_ON_ERROR, 512);
            // IMPORTANT: always convert large integers to string, otherwise numbers can be rounded by JS
            // replace large JSON integers only, do not replace anything in JSON/JS strings
            $jsonLargeNumbers = preg_replace_callback('~(?:"(?:[^"\\\\]+|\\\\.)*")?+\K|(?:\'(?:[^\'\\\\]+|\\\\.)*\')?+\K|(?:^|[{\[,:])'
                . '[ \n\r\t]*\K-?[1-9]\d{15,}(?=[ \n\r\t]*(?:$|[}\],:]))~s', function ($matches) {
                    if ($matches[0] === '' || abs((int) $matches[0]) < (2 ** 53)) {
                        return $matches[0];
                    return '"' . $matches[0] . '"';
                }, $json);
            if($jsonLargeNumbers == null) {
                return $json;
            return $jsonLargeNumbers;
    bug :beetle: MAJOR 
    opened by PhilippGrashoff 20
  • DropDown data-value=0 is treated as null

    DropDown data-value=0 is treated as null

    When we fill a DropDown with data, its data-value property is populated with each item's ID. Although rare, the value "0" is sometimes a legitimate choice for a database ID column value.

    When this happens, ATK UI will consider 0 as null during its dropdown validation, and display a "must not be null" validation error if 0 is selected. However, the user has made a valid selection and zero is not the same thing as null.

    P.S: This also reminds of #755 which is also an issue of how a zero value is handled as null. So zero handling should be perhaps reconsidered in ATK and fix it wherever it doesn't work correctly.

    opened by acicovic 18
  • Revert Behat filename tags

    Revert Behat filename tags

    How to run Behat on Windows:

    • copy behat.yml.dist to behat.yml locally and modify it to match your Selenium enviroment

    • run Behat tests from CLI from root directory like:

    php ../../behat/behat/bin/behat
    • you may also append absolute or relative path to CWD to run only one specific test
    php ../../behat/behat/bin/behat tests-behat/callback.feature
    • on Windows, you can run the tests from different directory from batch like:
    cmd /c "cd "%~dp0../vendor/atk4/ui" && php ../../behat/behat/bin/behat"

    /cc @ibelar @georgehristov

    opened by mvorisek 17
  • Error: Call to undefined method atk4\ui\Form::addTo()

    Error: Call to undefined method atk4\ui\Form::addTo()

    Using simple example I get this error: Call to undefined method atk4\ui\Form::addTo()

    the class atk4\ui\Form has not a addTo method. Maybe docs is not updated ? Please let me know. Regards.

    require_once __DIR__ . '/vendor/autoload.php';
    use atk4\ui\HelloWorld;
    use atk4\ui\Form;
    $app = new \atk4\ui\App('My First App');       // 3
    $form = \atk4\ui\Form::addTo($app); // Yeah, that's a form!
    $form->addField('email');    // adds field
    $form->onSubmit(function ($form) {
        // implement subscribe here
        return $form->success('Subscribed '.$form->model['email'].' to newsletter.');
    // Decorate anything
    $form->buttonSave->icon = 'mail';
    bug :beetle: question wontfix 
    opened by ghena 17
  • Switch from Semantic-UI to Fomantic-UI

    Switch from Semantic-UI to Fomantic-UI

    Fomantic is a community fork of Semantic UI. Currently they have delivered 2.4 release with various improvements and are more likely to progress forward.

    I propose that we use Fomantic instead of Semantic.

    question POLL 
    opened by romaninsh 16
  • Field names missing in Model->getField, causing corrupt Exception message

    Field names missing in Model->getField, causing corrupt Exception message

    In recent develop, example demos/form/form2.php don't work:

    • First form can never be saved, as iso ~cannot be empty, nor~ cannot it be changed
    • If you deactivate all validation handling in onSubmit to make it work again, still it will throw an error Javascript Error Syntax error, unrecognized expression: #

    The second form throws error Atk4\Ui\Exception: Callback requested, but never reached. You may be missing some arguments in request URL. on save.

    bug :beetle: MAJOR 
    opened by mkrecek234 15
  • Basket demo does not work fully

    Basket demo does not work fully

    • Go to demo https://ui.agiletoolkit.org/demos/interactive/popup.php
    • Add some
    • Hover on cart, according to instruction a click on item should remove it, and also there is a checkout button
    • All clicks (remove item / checkout) won't do a thing
    bug :beetle: 
    opened by mkrecek234 2
  • Custom modal form executor

    Custom modal form executor

    from chat:

    Still my custom modal executor stuff - I am convinced this would make UserActions more valuable to everyone. So far I cannot see that we have what we need. So may be I explain again if I may:

    • In a Model::init function you can add a UserAction that will open a Modal (this exists today). BUT: a) The form is NOT automatically rendered to collect the "Args" fields defined in the UserAction BUT it simply shows a defined form that you pass to the addUserAction / or a custom executor where then with few lines of code you defined which form to be show. b) Naturally the form has to return for sure the Args arguments and the fields content, so that the UserAction's callback can then handle the inputs and perform the data modification: So, conceptually something like:
    $country->addUserAction('edit_argument', [
        'caption' => 'Argument',
        'description' => 'Ask for argument "Age" prior to execute the action.',
        'args' => [
            'age' => ['type' => 'integer', 'required' => true],
        'executor' => [new CustomModalExecutor(['form' => CountryEditAgeForm::class, 'modal' => ['class' => 'tiny']])],
        'callback' => function (Country $model, int $age) {
            if ($age < 18) {
                $text = 'Sorry not old enough to visit ' . $model->getTitle();
            } else {
                $text = $age . ' is old enough to visit ' . $model->getTitle();
            return $text;

    (copied from https://github.com/atk4/ui/blob/ebbd3b952b44669d7793fa45e8995783ea17134c/demos/_includes/DemoActionsUtil.php#L42-L57, only 'executor' key/seed added)

    (Please don't take the code literally, just conceptually. I want to achieve to have a very simple way to design complex forms being shown for argument collection in UserActions. That is all. And it would be HIGHLY powerful. - You started on this but did not yet finish the part to pass a free form finally. May be we can finish this off still)

    enhancement :+1: 
    opened by mvorisek 4
  • ContainsXxx field should be editable in UI

    ContainsXxx field should be editable in UI

    Example code https://gist.github.com/abbadon1334/313e166efb598b8a416d6241c62ddbbb

    if ContainsOne or ContainsMany fields in persistence are not null and an exception is raised : Critical Error Atk4\Data\ValidationException: ContainsXxx does not support unmanaged data modification

    in Crud ContainsOne/ContainsMany must be not visible and should be managed by the framework when a model with those types of fields is added to crud

    to solve some issues i already create these Helpers, but I like to have a way in the framework to avoid these helpers, any ideas?

         * Use on Form to manage ContainsOne fields
         * @param Layout|Form $form
         * @param string      $fieldName
         * @throws Exception
         * @throws \Atk4\Data\Exception
         * @throws \Atk4\Ui\Exception
        public static function addControlContainsOne($form, string $fieldName): void
            $model = $form->model ?? $form->form->model;
            $ml = $form->addControl($fieldName . '_contains_one', [
                'rowLimit'    => 1,
                'addOnTab'    => false,
                'caption'     => $model->getField($fieldName)->getCaption(),
                'renderLabel' => false,
            ], [
                'neverPersist' => true,
            $model->onHook(Model::HOOK_BEFORE_SAVE, function ($m, $update) use ($ml) {
         * Use on Form to manage ContainsMany fields
         * @param Layout|Form $form
         * @param string      $fieldName
         * @throws Exception
         * @throws \Atk4\Data\Exception
         * @throws \Atk4\Ui\Exception
        public static function addControlContainsMany($form, string $fieldName): void
            $model = $form->model ?? $form->form->model;
            $ml = $form->addControl($fieldName . '_contains_many', [
                'addOnTab'    => false,
                'caption'     => $model->getField($fieldName)->getCaption(),
                'renderLabel' => false,
            ], [
                'neverPersist' => true,
            $model->onHook(Model::HOOK_BEFORE_SAVE, function ($m, $update) use ($ml) {
         * Call this on model before setModel to Table/Grid/Crud 
        public static function removeContainsXxx(Model $model) {
            foreach($model->getReferences() as $refName => $ref) {
                if ($ref instanceOf ContainsBase) {
    enhancement :+1: MAJOR 
    opened by abbadon1334 0
  • StepExecutor does pass empty args

    StepExecutor does pass empty args

    Steps to reproduce:

    1. add action with args - modify https://github.com/atk4/data/blob/be7c84f9f8d125025761485c4b4f2d203fad545c/src/Model/UserActionsTrait.php#L153 action to make it non-system
    2. open demos/data-action/jsactions2.php demo
    3. click on Validate action
    4. input some intent arg
    5. click Next
    6. click Validate
    7. an exception is shown: image

    The args array seems to be empty.

    bug :beetle: 
    opened by mvorisek 0
  • ScopeBuilder does not work with boolean type

    ScopeBuilder does not work with boolean type

    When I open demos/form-control/scope-builder.php demo and change the model to Atk4\Ui\Demos\File which has boolean field and then:

    click/add that boolean field:


    and click Save (on the ScopeBuilder demo) I get:


    bug :beetle: 
    opened by mvorisek 2
  • 3.1.0(Dec 30, 2021)

    What’s Changed

    • Add late output error test (#1719) @mvorisek
    • Remove unsafe script tag replace (#1716) @mvorisek
    • Fix datetime grid filter bug on empty input (#1718) @mkrecek234
    • Fix form2.php demo (#1711) @ibelar
    • Setup Flatpickr locale from ui persistence data (#1714) @mvorisek
    • Handle late error when exception handler is active (#1710) @mvorisek
    • Fix no longer supported native MSSQL DSN for CI (#1712) @mvorisek
    • Add filtering possibility for float and atk4_money DBAL types (#1703) @mkrecek234
    • Add test for unrecoverable App error (#1709) @mvorisek
    • Handle unhandled Callback exception using custom exception (#1702) @mvorisek
    • Adjust to renamed Model::onlyFields and Model::loaded methods (#1701) @mvorisek
    • Adjust to EntityFieldPair generics for Phpstan (#1700) @mvorisek
    • Align with the latest atk4/core (#1697) @mvorisek
    • Allow Overriding table on grid (#1695) @ibelar
    • Fix UI typecast for earlier nullable assertion (#1690) @mvorisek
    • Upgrade phpstan to v1.0 (#1686) @mvorisek
    • Fix DB config for CI webserver started with one env (#1683) @mvorisek
    • Fix Behat for CI (#1682) @mvorisek
    • Do not reuse Oracle connections for CI (#1678) @mvorisek
    • Fix testing with a real DBs (#1675) @mvorisek
    • Add Behat coverage (#1674) @mvorisek
    • Fix all memory leaks (#1672) @mvorisek
    • Fix some phpstan warnings (#1580) @mvorisek
    • Adjust to CS fixer v3.2 rules (#1670) @mvorisek
    • Feature/Panel Action Executor (#1650) @ibelar
    • Fix UI typecasting (#1667) @mvorisek
    • Allow to initialize CascadeDropdown values (#1659) @ibelar
    • Test with PHP 8.1 (#1660) @mvorisek
    • Rename "money" type to "atk4_money" type (#1665) @mvorisek
    • Adjust to no "password" type (#1666) @mvorisek
    • Fix spaces before/after "=>" in comments (#1663) @mvorisek
    • Refactor callback url test (#1662) @mvorisek
    • Fix Lookup form control (#1661) @ibelar
    • Fix Multiline Model validate (#1658) @ibelar
    • Fix #1645 (#1654) @abbadon1334
    • [fix] Id generation when using Executor as Modal View (#1575) @ibelar
    • Feature/Virtual Page Action Executor (#1649) @ibelar
    • Refactor Behat\Context methods (#1652) @ibelar
    • Fix JS lock file and JS CI lint (#1648) @mvorisek
    • Fix debouce for Behat testing (fake jQuery.active) (#1524) @mvorisek
    • Update JS and Fomantic UI to 2.8.8 (#1647) @ibelar
    • Improve memory leak testing (#1642) @mvorisek
    • Bump versions for the next release (#1637) @mvorisek
    • [fix] Js Dependencies (#1636) @ibelar

    Breaking Changes

    • Do not return the same object in View::setModel method (#1696) @mvorisek
    • Adjust to non-entity Field only (#1692) @mvorisek
    • Adjust to use DBAL type (#1664) @mvorisek
    • Improve callbacks url generation (#1646) @ibelar
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(May 11, 2021)

    Major Breaking Changes

    • Drop PHP v7.3 support and upgrade CS Fixer to v3 (#1632) @mvorisek
    • Upgrade atk4/data with strict entity model (#1623) @mvorisek

    Breaking Changes

    • [fix] Multiline (#1631) @ibelar

    Other Changes

    • Distribute Behat Context (#1628) @mvorisek
    • Fix typo (#1633) @JosepBernad
    • Upgrade phpstan to level 6 (#1630) @mvorisek
    • Adjust code for removed Field::reference property (#1626) @mvorisek
    • Adjust code for private Model::data prop (#1624) @mvorisek
    • [fix] Demo lister template (#1622) @ibelar
    • Adjust code for removed Model::newInstance() method (#1621) @DarkSide666
    • Use "dev" version for development (#1620) @mvorisek
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Apr 16, 2021)

    This release brings a lot of focus code-sense and hinting. If you are using modern PHP IDE, you will feel benefit of autocompletion almost everywhere.

    Magical hintable fields

    The hintable support is another major game changer in sense of cleaness and maintainability. Annotate model fields and used them magically as a real properties.

    Usage add Model class phpdoc:

     * @property string   $name   @Atk4\Field()
     * @property int      $age    @Atk4\Field()
     * @property Standard $mother @Atk4\RefOne()
    class X extends Model
    { ...

    Use the properties either as standard value property:

    $model->age // instead of  $model->get('age')
    $model->age = 25 // instead of $model->set('age', 25)

    You will also notice that adding fields in examples is using a different syntax:

    $this->addField($this->fieldName()->age); // instead of addField('age');

    What’s Changed

    • Fix path to /public/ in releases, use CDN (#1619) @mvorisek
    • Update release builder (#1616) @mvorisek
    • Use RefMany, strict checks relaxed in upstream (#1618) @mvorisek
    • Update hintable dep to 1.2.x (#1617) @mvorisek
    • Use loadOne for model from one ref (#1615) @mvorisek
    • [fix] registerExecutor parameter type (#1613) @ibelar
    • Use TraitUtil for trait detection (#1612) @mvorisek
    • Use simpler model->getId() where possible (#1609) @mvorisek
    • Prefix/test also all ID fields (#1595) @mvorisek
    • Use also different actual name (#1593) @mvorisek
    • [fix] VirtualPage inside VirtualPage (#1603) @ibelar
    • [fix] - Demo Tutorial (#1600) @ibelar
    • [fix] - Dropdown cascade (#1599) @ibelar
    • Fix for nice captions (adjust for latest atk4/data) (#1594) @mvorisek
    • Fix autoload for demos with classmap authoritative (#1585) @mvorisek
    • Fix CS/Behat config (#1588) @mvorisek
    • [fix] Demo using containsMany (#1586) @ibelar
    • Update/Upgrade package dependency (#1572) @dependabot
    • Fix for data 819/820 (#1583) @mvorisek
    • Callback accepts \Closure only (#1582) @mvorisek
    • Improve PHPStan to level 5 (#1581) @mvorisek
    • Better hasOne usage (#1579) @mvorisek
    • Fix all non-undefined PHPStan ignores 1/2 (#1554) @mvorisek
    • Fix App::encodeJson regex backtrack limit issue (#1573) @mvorisek
    • Fix strict types in App::getTag() (#1541) @PhilippGrashoff
    • [fix] Multiline Typecase (#1571) @ibelar
    • [fix] Property access for Modal Executor (#1565) @ibelar
    • [fix] ReadMe link (#1566) @ibelar
    • [fix] Lookup add condition after model is set (#1558) @ibelar
    • Requiring atk4/data is enough (#1557) @mvorisek
    • [fix] Card Deck demo (#1552) @ibelar

    Breaking Changes

    • Feature/Executor refactor (#1550) @ibelar
    • [fix] - Js search and popupService (#1604) @ibelar
    • [fix] VirtualPage (#1602) @ibelar
    • Feature/ Add Lookup to Multiline (#1577) @ibelar

    Major Features

    • Convert hardcoded strings in demos to hintable fields (#1559) @mvorisek
    Source code(tar.gz)
    Source code(zip)
  • 2.3.5(Dec 4, 2020)

  • 2.3.2(Dec 4, 2020)

  • 2.3.1(Oct 13, 2020)

  • 2.2.1(Oct 13, 2020)

  • 2.3.0(Oct 6, 2020)

    What’s Changed

    • Fix caching, use raw.githack.com instead of jsdelivr for develop (#1475) @mvorisek
    • Fix composer CS (#1473) @mvorisek
    • Bundle repeatable build JS files (#1470) @mvorisek
    • Feature/add date picker to Multiline (#1464) @ibelar
    • Refactor ScopeBuilder date picker (#1463) @ibelar
    • Fix JS bundle URL escape (#1465) @mvorisek
    • [fix] Behat test when using chunk js file (#1458) @ibelar
    • Add smoke and burn CI testing (#1456) @mvorisek
    • [fix] set defautl path when missing (#1454) @ibelar
    • Catch all errors by App handler incl. php notices (#1453) @mvorisek
    • [fix] - Bundle loading path (#1452) @ibelar
    • [feature] Vue Component loaded dynamically (#1448) @ibelar
    • Fix Multiline component (#1451) @DarkSide666
    • Move setting ScopeBuilder default scope (#1450) @georgehristov
    • Feature/fix scopebuilder (#1449) @DarkSide666
    • [fix] - CascadeDropdown rendering (#1445) @ibelar
    • Improve doc only (#1447) @mvorisek
    • Fix code to not use dropped legacy/array OR (#1446) @mvorisek
    • Update code for dropped magical "id" property from Model (#1442) @mvorisek
    • Update code for updated "id" handling/checking (#1441) @mvorisek
    • Fix/doc attributes and typos (#1443) @georgehristov
    • [fix] attributes layout (#1440) @georgehristov
    • [fix] class declarations in docs (#1439) @georgehristov
    • Fix doc syntax (#1438) @mvorisek
    • Norm phpunit config and CS config (#1436) @mvorisek
    • Fix code for updated Model class (prevent reload with a different record (#1429) @mvorisek
    • Add type validation to factory calls (#1282) @mvorisek
    • [fix] - Js Package bundle (#1430) @ibelar
    • [fix] Dropdown using multiple in read only mode (#1433) @ibelar
    • [fix] Date picker popup style (#1432) @ibelar
    • Enforce industry standard Airbnb JS Coding Standards (#1426) @mvorisek
    • Lint (incl. CS) JS files in GH CI (#1280) @mvorisek
    • Add possibility to change Template class in loadTemplate; clean up App (#1425) @PhilippGrashoff
    • Build and diff HTML in GH CI + fix sync (#1423) @mvorisek
    • Build and diff CSS in GH CI + fix sync (#1424) @mvorisek
    • Fix Model::setOrder() usage (#1422) @mvorisek
    • Do not use compact() function (#1421) @mvorisek
    • Use native and/or in Vue Scope builder internally (#1386) @mvorisek
    • Do not bundle Vue licence file (#1419) @mvorisek
    • Improve comment CS (#1418) @mvorisek
    • Fix code for updated phpunit CodeCoverage constructor (#1416) @mvorisek
    • Render full exception details on ModalExecutor error (#1412) @mvorisek
    • Extract native code instead of string eval in demos (#1408) @mvorisek
    • Fix input form attribute as soon as possible, needed for partial render (#1410) @mvorisek
    • View::_getStickyArgs() returns args incl. from self (#1407) @mvorisek
    • Improve Behat testing - always fail if page contains uncaught exception (#1404) @mvorisek
    • [feature] introduce AboveInput and BelowInput regions for Upload (#1403) @georgehristov
    • [fix] closure variable name (#1402) @georgehristov
    • [fix] usage of array access on model in demo (#1400) @georgehristov
    • [fix] check if any data recalled by FilterModel (#1398) @georgehristov
    • Improve Behat testing and handle all waits using hooks (#1392) @mvorisek
    • Add Behat testing with Firefox (#1389) @mvorisek
    • Test using locally built JS/CSS files (#1391) @mvorisek
    • Move Behat testing to GitHub Actions (#1390) @mvorisek
    • Refactor usages of call_user_func to direct calls (#1387) @mvorisek
    • Introduce FormField\ScopeBuilder (#1127) @georgehristov
    • [fix] Build Query function (#1381) @ibelar
    • [fix] Modal Element reload (#1374) @ibelar
    • [fix] ModalExecutor getControl() (#1373) @ibelar
    • fix composer.json (#1371) @DarkSide666
    • Fix form selector for Lookup with dependency support (#1370) @mvorisek

    Breaking Changes

    • Dropdown refactor (#1457) @ibelar
    • Cleanup JsExpression to string/JS (#1466) @mvorisek
    • Refactor Js Atk Bundle eventBus (#1435) @ibelar
    • Make init() methods protected and fix calls to ->invokeInit() (#1428) @mvorisek
    • No app/global sticky Callback (#1397) @mvorisek
    • Rename Upload control URL args (#1417) @mvorisek
    • Add AbstractView and use it as a base class for Callback (#1396) @mvorisek
    • Callback/sticky args refactor (#1377) @ibelar
    • Allow upload multiple (#1380) @mvorisek
    • Callable to closure refactor (#1384) @mvorisek

    Major Features

    • No app/global sticky Callback (#1397) @mvorisek
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Jul 15, 2020)

    Breaking Changes

    • Refactor Template and improve performance and type safety (#1349) @mvorisek
    • Close html tag immediatelly - add nested Form support (#1275) @mvorisek
    • Drop App::dbConnect() method (#1361) @mvorisek
    • Refactor render methods (#1358) @mvorisek
    • Fix PSR class/trait/method naming (#1354) @mvorisek
    • Move Layout\Generic to Layout (#1335) @georgehristov
    • [refactor] model user action executors (#1308) @georgehristov
    • Rename TableColumn NS to Table\Column (#1313) @georgehristov
    • Rename FormField NS to Form\Control (and FormLayout to Form\Layout) (#1311) @georgehristov

    Major Features

    • Close html tag immediatelly - add nested Form support (#1275) @mvorisek
    • Rename TableColumn NS to Table\Column (#1313) @georgehristov
    • Rename FormField NS to Form\Control (and FormLayout to Form\Layout) (#1311) @georgehristov

    What’s Changed

    • Fix composer develop install issue (#1368) @DarkSide666
    • Fix Model::set() with no longer supported array input (#1367) @mvorisek
    • Fix for stricter method prototypes (#1366) @mvorisek
    • Fix for Model::set() no longer supports array (#1364) @mvorisek
    • [feature] - Update Js package dependency (#1362) @ibelar
    • Fix docs for removed App::dbConnect() method (#1363) @mvorisek
    • Rename template dirs to match class NS (#1360) @mvorisek
    • [fix] Virtual page rendering (#1359) @ibelar
    • [feature] Update to Fomantic-UI version 2.8.6 (#1352) @ibelar
    • Update CS for PHP 7.3 (#1357) @mvorisek
    • [fix] CRUD afterDelete hook (#1356) @ibelar
    • [refactor][fix] MultiLine form control (#1355) @ibelar
    • [fix] Table Action Confirmation Message (#1353) @ibelar
    • Move safe "@return bool" phpdoc to code (#1337) @mvorisek
    • try to fix json encode (#1351) @DarkSide666
    • Drop PHP 7.2 support (#1345) @mvorisek
    • Fix not freed objects/references (#1348) @mvorisek
    • Use DockerHub registry instead of CFCR (#1346) @romaninsh
    • [update] use explicit argument names (#1339) @georgehristov
    • Use correct classes in Form\Control\DropdownCascade (#1343) @georgehristov
    • [hotfix] demos using Layout\NavigableInterface instead of Layout\Navigable (#1344) @georgehristov
    • Optimize Travis composer install (#1334) @mvorisek
    • No echo and output buffering in App::run() (#1338) @mvorisek
    • Fixes in docs and inline comments (#1336) @georgehristov
    • Add testing with PHP 8.0 (#1333) @mvorisek
    • fix property names (#1332) @DarkSide666
    • Fix Action button icon (#1331) @DarkSide666
    • Fix FormField/FormLayout rename refactoring (#1329) @georgehristov
    • Fix seed usage - icon without class name, instance as class name (#1330) @mvorisek
    • [fix] Form Section (#1325) @ibelar
    • [fix] Form Conditional Control (#1324) @ibelar
    • fgets can also return false (#1323) @DarkSide666
    • Hotfix string seeds (#1320) @mvorisek
    • Use strict array seed (#1315) @mvorisek
    • [fix] - Table Generic Hook const (#1318) @ibelar
    • Throw standard exception on "callback never reached" error (#1312) @mvorisek
    • Fix Demo - Crud caption for Anonymous class (#1304) @abbadon1334
    • Add phpdoc to anonymous classes in demos (#1303) @mvorisek
    • Cache template files in memory (#1301) @mvorisek
    • Fast testing without webserver (#1277) @mvorisek
    • [fix] Crud sorting and pagination (#1302) @ibelar
    • [fix] File Import Demo (#1299) @ibelar
    • Dump Behat page data on/for (the first) failed step (#1281) @mvorisek
    • Transform SQL demo data to Sqlite and use Sqlite as default for demos (#1294) @mvorisek
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Jun 16, 2020)

    Please see 2.1 release announcement here: https://forum.agiletoolkit.org/t/atk-ui-2-1-release/834

    Breaking Changes

    • Always convert large (>= 2^53) integers to string in JSON output (#1260) @mvorisek
    • Normalize View->add() to always require a seed class like ->factory() already does (#1238) @mvorisek
    • Remove support of relative class names (#1158) @mvorisek
    • Convert callables to closures and move hook names to constants (#1201) @mvorisek
    • Fix wrong URL fallbacks (#1167) @mvorisek

    What’s Changed

    • Test using prod CSS (#1296) @mvorisek
    • Generate JS files in CI/CD (#1178) @romaninsh
    • Refactor demos and add phpdoc for $app from init (#1292) @mvorisek
    • Remove old IE8 CSS compatibility flag (#1293) @mvorisek
    • Fix/demo intro (#1291) @georgehristov
    • [fix] Centered Layout demo (#1285) @ibelar
    • Update CS - require strict types (#1145) @mvorisek
    • Fix demos without dev deps when as a root project (#1287) @mvorisek
    • Fix Docker/web without dev deps (#1286) @mvorisek
    • Refactor demo includes (#1284) @mvorisek
    • Simplify use of Persistence\Array_ constructor (#1205) @mvorisek
    • [fix] Admin - Maestro css (#1269) @ibelar
    • Fix demos autoload if not installed as a main composer project (#1276) @mvorisek
    • Fix inproper seeds merges (#1274) @mvorisek
    • Small normalization changes (#1146) @mvorisek
    • Do not use deprecated properties to check trait presence (#1273) @mvorisek
    • Fix usage of hasXXX(), it now return bool only (#1252) @mvorisek
    • Remove test of disable_functions from Dockerfile (#1272) @mvorisek
    • Remove @throws by CS fixer (#1271) @mvorisek
    • Disable exec (and simillar) functions in demo Docker config (#1231) @mvorisek
    • Fix tests - do not rely on hardcoded/expected names (#1245) @ibelar
    • Delete Makefile (#1268) @mvorisek
    • Fix current_row type mismatches (#1212) @mvorisek
    • Improve Fix/layout switching #1263 (#1264) @mvorisek
    • Delete .github_changelog_generator (#1265) @mvorisek
    • Delete .codeclimate.yml (#1266) @mvorisek
    • Fixed grammatic in Grid items per page (#1267) @mkrecek234
    • Fix/layout switching (#1263) @ibelar
    • Render console exceptions using standard HTML exception renderer (#1246) @mvorisek
    • Few bugfixes (#1261) @DarkSide666
    • Prevent minified files normalization in git (#1249) @mvorisek
    • Delete CHANGELOG.md and build/add it to releases (#1234) @mvorisek
    • Fix missing DIContainerTrait when StaticAddToTrait is used (#1251) @mvorisek
    • Upgrade JQuery to 3.5.1 (#1248) @mvorisek
    • Upgrade to Fomantic UI 2.8.5 (#1240) @ibelar
    • Revert fix demo popup - not needed after atk4/core#220 (#1239) @ibelar
    • Fix exception constructor refactoring (#1247) @mvorisek
    • Refactor exception constructor calls to not use array (#1242) @mvorisek
    • Refactor ::addToWithClassName() to ::addToWithCl() (#1237) @mvorisek
    • ViewTester fixes (#1232) @DarkSide666
    • Emit status code = 500 on error (#1075) @mvorisek
    • fix/Recursive demo (#1230) @ibelar
    • fix/Popup demo (#1229) @ibelar
    • fix demo for tabs (loading other page) (#1226) @romaninsh
    • fix demo scripts (#1228) @DarkSide666
    • fix/ demo grid.php (#1227) @ibelar
    • bypass cache for demo ui site build. (#1223) @romaninsh
    • Add sample content into "file" demo table (#1225) @romaninsh
    • Fix/demos fix (#1224) @ibelar
    • Add NS to demos (#1200) @mvorisek
    • fix action model array access bug (#1222) @DarkSide666
    • Remove obsolete App::normalizeClassNameApp() (#1221) @mvorisek
    • Detect unwanted output before App::outputResponse() (#1220) @mvorisek
    • [feature] Display form field using field name in template (#1216) @ibelar
    • [fix] Crud using action modifier (#1215) @ibelar
    • [fix] Filter Column when using decorator (#1190) @ibelar
    • Always convert large (>= 2^53) integers to string for JS (#1218) @mvorisek
    • [fix] Left menu visibility (#1217) @ibelar
    • use getTitles() (#1213) @DarkSide666
    • fix #1174 - cdn link trailing slash (#1211) @mvorisek
    • Pass value with correct escaping, not embed (#1207) @romaninsh
    • Fix misc NS (#1204) @mvorisek
    • Fix FilterModel/Generic with NameTrait removed from Model (#1208) @mvorisek
    • clean up after #1177 (#1203) @romaninsh
    • Delete agileui.js (#1177) @mvorisek
    • Do not use array like access of Model (#1196) @mvorisek
    • Use MB functions (#1194) @DarkSide666
    • Catch Throwable instead of Exception (#1193) @mvorisek
    • [feature] Allow Modal to render in VirtualPage (#1187) @ibelar
    • Fix script/style escaping in App::getTag() (#1137) @mvorisek
    • [fix] Table link column with model using Date field (#1186) @ibelar
    • Doc: update "Javascript mappings" (#1180) @NotAProfessionalDeveloper
    • Formatters vs Decorators: Cleanup and precisions (#1185) @NotAProfessionalDeveloper
    • [fix] Card Deck Reload on first page (#1183) @ibelar
    • [fix] Css z-index value (#1182) @ibelar
    • [fix] Radio Input Field (#1181) @ibelar
    • Restore files as this is breaking existing ATK installations (#1179) @romaninsh
    • Feature/pipeline js build (#1176) @ibelar
    • Feature/pipeline for deploying ui demo (#1174) @romaninsh
    • Revert "Fix cdn caching for develop" (#1173) @romaninsh
    • [fix] Set proper callback type for right panel content (#1172) @ibelar
    • Fix cdn caching for develop (#1168) @mvorisek
    • Remove phpunit from Travis and report merged coverage from Github Actions (/wo Behat) (#1148) @mvorisek
    • Toast Demo titles and messages are messed up (#1170) @NotAProfessionalDeveloper
    • Fix admin left menu dynamic visibility (#1157) @mvorisek
    • [fix] Reload on Callback (#1155) @ibelar
    • [fix] - Header Menu Size (#1151) @ibelar
    • Fix paths in demos (#1153) @mvorisek
    • Fix doc typo (#1154) @mvorisek
    • Fix atk init (#1152) @mvorisek
    • [fix] Add stop function to ServerEvent js plugin (#1133) @ibelar
    • Delete release.sh if not needed (#1135) @mvorisek
    • Normalize Unit Testing workflow across repos (#1128) @mvorisek
    • Fix - Coverage (#1142) @ibelar
    • Test unit test path (#1140) @ibelar
    • Fix coverage of PR "Reorganize demos file" (#1139) @mvorisek
    • Reorganize demos file (#1122) @ibelar
    • Update Lookup.php (#1130) @mvorisek
    • [fix] Remove Footer Height Rule (#1131) @ibelar
    • [feature] Maestro Layout (#1120) @ibelar
    • Fix getRenderedModals (#1119) @abbadon1334
    • fix missing double backslash in docs (#1125) @georgehristov
    • Simplify locale path getter (#1124) @mvorisek
    • Documentation updates (#1123) @NotAProfessionalDeveloper
    • Feature/implement html decorator (#1121) @DarkSide666
    • enable control over action modal by option to pass defaults array (#1118) @georgehristov
    • App::addStyle should not encode value (#1111) @DarkSide666
    • Remove strange/skipped tests (#1115) @mvorisek
    • Upgrade phpunit (#1101) @mvorisek
    • Fix closure for extended App (#1114) @abbadon1334
    • [feature] - Admin Layout (#1112) @ibelar
    • [fix] CRUD::addModalAction to use appSticky argument on Modal callback (#1109) @ibelar
    • [fix] - Setting value on DropdownCascade (#1100) @ibelar
    • Fix phpunit before full upgrade (#1105) @mvorisek
    • [fix] Add css and js file to public dir (#1106) @ibelar
    • reset release drafter (#1104) @ibelar
    • Feature/release drafter (#1103) @ibelar
    • [feature] - Release drafter js compile (#1102) @ibelar
    • Do not require database for array based CRUD demo (#1094) @mvorisek
    • Remove vim comment (#1099) @mvorisek
    • Fix CI/CD (#1097) @mvorisek
    • [fix] Behat js Callback test (#1096) @ibelar
    • Fix init(), setDefaults(), normalizeClassNameApp() methods headers (#1089) @mvorisek
    • [Feature] Right layout panel (#1085) @ibelar
    • [Fix] Issue #967 (#1090) @ibelar
    • [fix] UserConfirmation executor + Behat test (#1088) @ibelar
    • Documentation updates (#1087) @NotAProfessionalDeveloper
    • Remove App::outputDebug() method (#1064) @mvorisek
    • Improve EOL normalization (#1084) @mvorisek
    • Render all exceptions using App (#1082) @mvorisek
    • Disable caching by default (#1083) @mvorisek
    • Improve HTTP headers output (#1065) @mvorisek
    • [fix] UserAction Modal Id (#1070) @ibelar
    • Display non-Atk exceptions like Atk ones (#1078) @mvorisek
    • Use null coalescing operator instead of isset (#1076) @mvorisek
    • Improve refactorability of Wizard demo (#1073) @mvorisek
    • Fix CS - do not import classes without namespace (#1072) @mvorisek
    • Cleanup coverage testing (#1067) @mvorisek
    • Fix 5th parameter for set_error_handler() handler is deprecated (#1066) @mvorisek
    • Use content type from the source + cleanup of URL methods (#1051) @mvorisek
    • Remove @param phpdoc without type nor comment (#1055) @mvorisek
    • [fix] - Downgrade Fomantic-UI release to 2.7.4 (#1049) @ibelar
    • Convert scalar class names to ::class (#1054) @mvorisek
    • Fix refactorability for "owner" (#1047) @mvorisek
    • Fix set null for non-nullable fields (#1053) @mvorisek
    • Fix phpdoc in Lookup (#1046) @mvorisek
    • Fix demo (#1048) @DarkSide666
    • Updating CDN link to use @2.1.0 (#1038) @github-actions
    • --
    • Add workflow for deploying "ui.agiletoolkit.org" automatically. (#873) @romaninsh
    • fomantic update 2.8.4 (#979) @romaninsh
    • Delete config.yml (#939) @mvorisek
    • Update Grid.php (#1035) @mkrecek234
    • Apply fixes from StyleCI (#1037) @romaninsh
    • [refactor] AutoComplete into Lookup (#1018) @ibelar
    • Fix typo (#1036) @mvorisek
    • [fix] - Allow onDelete or onUpload callback to run within another callback (#1034) @ibelar
    • Fix TableColumn\Labels for null values (#1033) @arrochado
    • [Feature] Dropdown Cascade Form Field (#1012) @ibelar
    • Do not append semicolon to statement when not needed (#1026) @mvorisek
    • [Fix] PHP Notice Bad Index on jsCallback (#1017) @ibelar
    • Add concat spaces (#1019) @mvorisek
    • fix adding of sub-menus (#1016) @georgehristov
    • fix/jQuery var assignment (#1011) @ibelar
    • Improve ->add() - fallback is always absolute class name (#1008) @mvorisek
    • Fix TravisCI/Behat tests (#1007) @mvorisek
    • Refactor ->add() usage to ::addTo() in docs (#1004) @mvorisek
    • Fix hook trait usage (#1003) @mvorisek
    • Refactor ->add() usage to ::addTo() (#991) @mvorisek
    • better support for arguments with model type (#1001) @DarkSide666
    • fix/Delete package-lock json file (#1000) @ibelar
    • fix/Js Package Dependencies (#999) @ibelar
    • tabs should not highlight (#998) @DarkSide666
    • fix issues with Card and CardDeck (#996) @DarkSide666
    • [REFACTOR] rename addHook to onHook (#968) @georgehristov
    • [FEATURE] introduce autocomplete dependency (#951) @georgehristov
    • fix #995, simplify session object in demo (#997) @DarkSide666
    • Add return type hint (#984) @mvorisek
    • Fix missing EOL in text files (#985) @mvorisek
    • Use ::addTo() method in View::add() (#929) @mvorisek
    • Fix typo in form.rst (#988) @mvorisek
    • setLayout -> initLayout (#977) @DarkSide666
    • Some cleanup (#976) @NotAProfessionalDeveloper
    • Implement $sortable property for TableColumn. (#972) @DarkSide666
    • fix/UserAction executor Field value in Preview (#970) @ibelar
    • fix/UserAction Title (#964) @ibelar
    • [FIX] table column actions icon full browser support (#962) @georgehristov
    • [CHORE] use shorthand syntax (#954) @georgehristov
    • [FIX] table column actions icon (#960) @georgehristov
    • [REFACTOR] Menu for flexibility, consistency and one-liner code (#955) @georgehristov
    • [FEATURE] enable use of existing menu for Grid (#959) @georgehristov
    • move typecasting to Field and allow DropDown towork with model field … (#961) @DarkSide666
    • REFACTOR: use array casting and arguments spread (#950) @georgehristov
    • use regex with full string match on SSE response keys (#949) @georgehristov
    • [FIX] CRUD menu unnecessary destruction (#957) @georgehristov
    • Feature/tablecol labels (#958) @DarkSide666
    • [DOCS] explain setting form field default values (#952) @georgehristov
    • Feature/Add properties to force js execution for actions (#953) @ibelar
    • set test web server root to package root directory (#948) @georgehristov
    • Fix/UserAction Validation error (#896) @ibelar
    • Fix selector of remove prompt (#914) @mvorisek
    • Fix/Crud delete action and UserAction (#936) @ibelar
    • Fix includes (#941) @mvorisek
    • Testing PR. (#947) @romaninsh
    • Do not fail-fast PHP test matrix (#937) @mvorisek
    • Fix TravisCI build (#931) @mvorisek
    • fix/Duplicate Url encoding (#945) @ibelar
    • Fix/Filter Popup test (#942) @ibelar
    • Swap conditions, prevent ".." file lookup (#938) @mvorisek
    • Change AutoComplete and Lookup default limit to 100 values (#928) @mvorisek
    • Change Dropdown, Autocomplete and Lookup empty value to Unicode NBSP (#927) @mvorisek
    • Don't render Menu if it's empty (#917) @DarkSide666
    • Fix PHP notice - field can be null (#926) @mvorisek
    • use trait for table tests (#910) @georgehristov
    • Fix/Clear Api Data with all server response (#909) @ibelar
    • use one liner for jQuery selector (#912) @georgehristov
    • Trim search query in Grid component (#915) @mvorisek
    • Update indent in example in README (#906) @mvorisek
    • Implement conditional tags in template (#899) @DarkSide666
    • fix/Demos grid.php (#905) @ibelar
    • Update string quotes to make the code compatible with Netbeans (#901) @mvorisek
    • Fix/Table Popup - Dropdown (#900) @ibelar
    • Add action should respect enabled/disabled switch (#898) @DarkSide666
    • usage of getFields() and fix Card (#892) @DarkSide666
    • [REFACTOR] use same one-liner to shift selector column as on drag handler (#895) @georgehristov
    • Fix/Enable Callback argument to stick at application (#894) @ibelar
    • Fix/CRUD onForm callback (#893) @ibelar
    • Fix missing EOLs in text files (#888) @mvorisek
    • Feature/update readme (#871) @romaninsh
    • fix #850 (#886) @DarkSide666
    • set model on initialization (#884) @georgehristov
    • introduce record specific enabling/disabling of actions in Grid/CRUD (#874) @georgehristov
    • Feature/Card Field default (#883) @ibelar
    • Updating CDN link to use @2.0.4 (#881) @github-actions

    Documentation enhancements

    • Feature/improve tutorials (#872) @romaninsh
    Source code(tar.gz)
    Source code(zip)
  • 2.0.4(Jan 17, 2020)

    What’s Changed

    • Fix/UserAction in VirtualPage and Tabs (#880) @ibelar
    • move jsInput, add jsChecked (#879) @DarkSide666
    • use getFields() instead of elements property (#876) @DarkSide666
    • Feature/enable setting custom exec button for an action (#853) @georgehristov
    • Updating CDN link to use @2.0.3 (#866) @github-actions

    Documentation enhancements

    • Added namespaces to quickstart and file structure example (#857) @bedengler
    Source code(tar.gz)
    Source code(zip)
  • 2.0.3(Dec 15, 2019)

  • 2.0.2(Dec 15, 2019)

    What’s Changed

    • Release/2.0.1 backport. (#862) @romaninsh
    • Releasing refs/heads/release/2.0.1 into master (#861) @github-actions
    • DateTime is object and working on same object is replacing both value… (#834) @gowrav-vishwakarma
    • Improvement/include action caption in modal title (#852) @georgehristov

    Documentation enhancements

    • Add Instantiate App using DIContainerTrait (#855) @abbadon1334
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Dec 15, 2019)

    Major features

    • Implemented User Action support

    What’s Changed

    • Releasing 2.0.0 into master (manually) (#859) @romaninsh
    • Change in demo : exit() to $app->callExit() (#854) @abbadon1334
    • Feature/input action (#845) @ibelar
    • Add Github workflows (actions) (#848) @romaninsh
    • Feature/Card Deck using model action (#846) @ibelar
    • Feature/Code Highlight (#849) @ibelar
    • Fix few bugs and add comments (#847) @DarkSide666
    • Feature/refactor crud2 (#835) @romaninsh
    • Add SSE operation with user confirmation example (#843) @acicovic
    • pulling in from atk (#1) @stokkeland
    • Property currency_decimal added to Persistence UI (Money Type) (#840) @stokkeland
    • Feature/Table Menu Action (#833) @ibelar
    • Feature/column user actions (#832) @romaninsh
    • Feature/Refactor View::on() method (#831) @ibelar
    • fix/DropDown Unnecessary isValueRequired property (#826) @ibelar
    • Refactor of User Action Executor (#820) @romaninsh
    • feature/TreeItemSelector Form Field (#812) @ibelar
    • Add Locale class (#819) @abbadon1334
    • #823: Fix a few phpDoc comments. (#824) @Taitava
    • Feature/fix textarea (#822) @romaninsh
    • Fix #814 - useless code in Form.php (#818) @abbadon1334
    • Mutliline: Improve inline docs and comments (#811) @acicovic
    • Fix/MultiLine Improvement (#816) @ibelar
    • Make Escape key clear Grid Search (#815) @acicovic
    • Fix unclickable Autocomplete/Lookup fields (#808) @acicovic
    • fix/#802 Array fields error in form (#804) @ibelar
    • Fix #805 (#806) @karakal
    • Formfields: Add ability to set attributes to Tag (#807) @PhilippGrashoff
    • Add App->catch_error_types to define set_error_handler in App (#803) @abbadon1334
    • Add ability to customize CSS of 'content' div (#795) @acicovic
    • fix/CaughException Layout (#800) @ibelar
    • Bump eslint-utils from 1.4.0 to 1.4.2 in /js (#801) @dependabot
    • Feature/Add Form support for containsMany field using MultiLine (#784) @ibelar
    • add "Is Not" for TableColumn::FilterModel::TypeString (#796) @funyx
    • remove extra spaces from Response Content-Type (#792) @abbadon1334
    • Add target parameter to link() function (#791) @acicovic
    • Remove calls to exit functions and cleanups (#790) @abbadon1334
    • Gowrav vishwakarma ui editable bug (#782) @romaninsh
    • Feature/fix textarea (#783) @DarkSide666
    • Fix #786 - Exception display in app and modals (#789) @acicovic
    • Simplify setStyle method (#788) @DarkSide666
    • Let user overwrite all calendar options (#777) @FabulousGee
    • Fix #651 - Modal fails on js load if a php exception is thrown (#780) @abbadon1334
    • Implement $_POST test for Form (#776) @romaninsh
    • upgrade npm (#774) @romaninsh
    • refactor to use getFields() (#775) @romaninsh
    • Bump lodash from 4.17.11 to 4.17.14 in /js (#773) @dependabot
    • Feature/confirm modal (#770) @ibelar
    • Add support for using afterSuccess and apiConfig in View and Grid (jsReload) (#769) @pkly
    • feature/Form Action Executor (#768) @ibelar
    • Fix #766 (#767) @PhilippGrashoff
    • fix php notice (#762) @DarkSide666
    • fix/#746 Duplicate button and icon id (#747) @ibelar
    • Small changes to templates (form/centered layout) (#750) @pkly
    • Fix/Form::success() (#759) @ibelar
    • Revert "fix #755" (#761) @romaninsh
    • Add Unit test and Fix some issue on TableColumn\ColorRating (#757) @abbadon1334
    • fix #755 (#756) @DarkSide666
    • Fix #629, also add new Callback for custom HTML (#643) @PhilippGrashoff
    • feature/ js Executor for Action (#751) @ibelar
    • fix/Add section with no model (#745) @ibelar
    • fix negative status (#738) @DarkSide666
    • Feature2/cardholder (#744) @romaninsh
    • Added ExternalLink, KeyValue, NoValue, Labels, Tooltip and ColorRating table decorators (#743) @romaninsh
    • Feature2/card (#742) @romaninsh
    • Feature2/integrate actions (#741) @romaninsh
    Source code(tar.gz)
    Source code(zip)
  • 1.7.1(Jun 12, 2019)

    Revert breaking namespace-related commit

    The change in the namespace use didn't go that well, so we reverted it from 1.7.1 (revert https://github.com/atk4/ui/pull/702)

    Source code(tar.gz)
    Source code(zip)
  • 1.7.0(Jun 3, 2019)

    In 1.7 we now rely on VueJS for new components and the first component to make use of VieJS is the MultiLine edit.

    $f = $app->add('Form');
    // Add multiline field and set model.
    $ml = $f->addField('ml', ['MultiLine', 'options' => ['color' => 'blue']]);

    For more information see demos/multiline.php.

    Also we continue to improve documentaiton and work on bugs. Full list of changes below:

    Closed issues:

    • Grid and CRUD is not aware of having menu=>false #720
    • Bug in custom CRUD->itemCreate support #719
    • Upload field dialog opens multiple times #717
    • addFields() doesn't work for forms #695
    • Display Exception in Atk callback #691
    • RawGit is shutting down. The latest example defaults to RawGit shared resources. #685
    • Running jsReload causes sub-modals to multiply in modal->set() #681
    • Semantic applies opacity 2 times on disabled fields #679
    • Lookup field empties itself when resetting #664
    • On Custom Form Layout, Lookup FormField has an empty <label> tag #663
    • Looking for a weekly meeting coordinator #658
    • With Fomantic UI 2.7.2 jsNotify hides at once #647
    • Field error message should disappear on(change) #515

    Merged pull requests:

    Source code(tar.gz)
    Source code(zip)
  • 1.6.5(Mar 5, 2019)

    Closed issues:

    • Bad icon and text button vertical alignment #668
    • Incorrect ids for elements #667
    • Width is not applied correctly to elements #656
    • Improvements to Console #392

    Merged pull requests:

    • Feature/Fomantic Update #675 (@ibelar)
    • fix/Radio Input Field #674 (@ibelar)
    • fix/jsNotifier Transition #673 (@ibelar)
    • fix/Lookup Autocomplete fixes #671 (@ibelar)
    • Add container for action buttons #669 (@DarkSide666)
    • revert lister template changes #666 (@DarkSide666)
    • Defines which Table Decorator to use for Actions #665 (@gowrav-vishwakarma)
    Source code(tar.gz)
    Source code(zip)
  • 1.6.4(Feb 25, 2019)

  • 1.6.3(Feb 23, 2019)

    Closed issues:

    • Table using setSource(): Ability to add custom headline #650
    • Double confirm alert #649
    • Form - create "read-only" field #486

    Merged pull requests:

    • Update UI.php to let dev decide about naming #657 (@FabulousGee)
    • Removed deprecated each functions from template parsing #654 (@abbadon1334)
    • fix/#649 Double Confirm #653 (@ibelar)
    • make templates-dir easier to customize #648 (@DarkSide666)
    • Atk4/ui/table column image #645 (@skondakov)
    • bugfix for confirm #644 (@DarkSide666)
    Source code(tar.gz)
    Source code(zip)
  • 1.6.2(Feb 4, 2019)

    Closed issues:

    • dev-develop branches should require other dev-develop branches for all atk/* repositories #641
    • mink-selenium2-driver #638
    • hasOne relation should use Lookup field instead of DropDown by default #636
    • Template: tryAppend() and tryAppendHTML() woud be nice #626
    • Possible Restriction Solution: custom templates must be defined in vendor atk4/ui #625
    • CRUD and read_only field #620
    • Ternary operator messes up integer with value = 0 in DropDown::getInput() #618
    • Template _top tag doesn't work #610
    • Multiple Modals: Closing second modal by clicking dimmer does not work everywhere in dimmer if second modal is smaller than first one #609
    • Lister need {empty} ability in it's template #606
    • confirm in View->on() only works with Callback, not with jsReload for example #503
    • Font size on tablet screen #485
    • Implement a simple template routing in Agile UI #440
    • Nested Modals #436
    • Integrate ATK with Zend3 #384

    Merged pull requests:

    • Add "confirm" option support for js->on() case #642 (@DarkSide666)
    • Feature/test persist array #640 (@DarkSide666)
    • fix #638 #639 (@DarkSide666)
    • Use Lookup field for hasOne, fix #636 #637 (@DarkSide666)
    • Don't apply sorting in case sortable=false. #635 (@DarkSide666)
    • Feature/fix paginator plus sort #634 (@DarkSide666)
    • Feature/upd crud demo #633 (@DarkSide666)
    • fix in case you don't have {empty} tag in your Lister template #632 (@DarkSide666)
    • add ability to set buttonSave=false to not create it #631 (@DarkSide666)
    • comment fix #630 (@DarkSide666)
    • Feature/allow to set multiple template paths #628 (@DarkSide666)
    • Refactor Template set, append, implement tryAppend, add tests. #627 (@DarkSide666)
    • Fix UTF-8 #624 (@mvorisek)
    • Critical bug fix: always convert Dropdown/Autocomplete/Lookup values to string #623 (@mvorisek)
    • Fixes #618: Process fields with integer value 0 correctly #619 (@PhilippGrashoff)
    • Feature/dynamic scroll crud #617 (@DarkSide666)
    • Make demo for dynamic scroll in container better #616 (@DarkSide666)
    • Feature/cond form fixes #615 (@DarkSide666)
    • Feature/add dropdown tests #614 (@romaninsh)
    • feature/upgrade js package dependencies #613 (@ibelar)
    • Feature/refactor template #612 (@DarkSide666)
    • Implements {empty} tag in Lister #611 (@DarkSide666)
    • Fix mobile layout #608 (@skondakov)
    • Catch coverage usage from callback handlers executed from php shutdown #607 (@romaninsh)
    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(Nov 29, 2018)

    Adding new form layouts, toast and switching to selenium for UI tests. Fixed readonly fields, added many tests and upgraded Fomantic-UI version.

    Closed issues:

    • Can not tick CheckBox field when it is in group #593
    • Message view Icon placement is strange #592
    • Modal without any action buttons at the bottom still shows action div #583
    • DropDown doesn't open when having showOnFocus=false #580
    • Feature Request: JsReload should be able to set .api parameters (like Form does) #578
    • Disabled fields can still be focused and edited #575
    • Grid sorting memorizes previous sort order in URL #573
    • Columns not sorting if added after setModel #544
    • Calendar form field on('change') event handler not working #521
    • Upload FormField: Setting placeholder via placeholder does not work #483
    • Placeholder is not picked up from Model field ui[placeholder] property #468
    • type='money' is no longer using 'Money' column decorarot #414

    Merged pull requests:

    • fix DropDown field HTML markup (getTag usage) #604 (@DarkSide666)
    • fix/Readonly state for Lookup and Autocomplete #603 (@ibelar)
    • fix/Dropdown multiple value #602 (@ibelar)
    • Feature/form section #600 (@ibelar)
    • Feature/accordion only #599 (@ibelar)
    • Feature/fix add column #597 (@DarkSide666)
    • don't show never_persist fields as changed - that's confusing #596 (@DarkSide666)
    • Switched to selenium... and it works, YEY #595 (@romaninsh)
    • Feature/Toast Module - Fomantic 2.6.4 Release #594 (@ibelar)
    • fix demo database #591 (@DarkSide666)
    • fix/lister demo template #588 (@ibelar)
    • Feature/dynamic scroll #587 (@ibelar)
    • Feature/demo lineend bug #586 (@DarkSide666)
    • Fix/#573 Memorize url #585 (@ibelar)
    • Only show action <div> if there are actions #584 (@PhilippGrashoff)
    • Feature/jsReload with semantic configurable api options. #582 (@ibelar)
    • add formConfig to pass parameters to FUI .form() #581 (@PhilippGrashoff)
    • Allow PHP 7.2+ to check method signatures #579 (@romaninsh)
    • View::on now takes callback and JS actions #577 (@PhilippGrashoff)
    • fix/ set input attribute to readonly or disable. #576 (@ibelar)
    • Sorting should happen later. Fix #544 #574 (@DarkSide666)
    Source code(tar.gz)
    Source code(zip)
  • 1.6.0(Oct 8, 2018)

    Our 1.6 release signifies a switch from a stale Semantic UI CSS framework to a community-supported Fomantic UI fork, version 2.6.2. Calendar widget is now supported natively, various other issues are addressed but, more importantly, Fomantic UI is open for collaboration. We are working with their core maintainers hammy2899, prudho and ColinFrick to implement new modern UI features.

    Also now have ability to resize any table, Grid or CRUD:

    // Enable reizable columns on the table
    // Also supports custom callaback (on-resize) and ability to pre-set the width:
    $table->resizableColumn(function($j, $w){
        $columnWidths = json_decode($w);
        // store widths somewhere
    }, [200,300,100,100,100]); // default widths
    // For Grid or CRUD:

    We also introducing a somewhat experemental "Lookup" field. It is identical to AutoComplete and can work as a stand-in replacement, but supports "filters". For now we are looking for ways to make this field more compact before it becomes part of AutoComplete.

    $form = $app->add(new \atk4\ui\Form(['segment']));
    $form->add(['Label', 'Add city', 'top attached'], 'AboveFields');
    $l = $form->addField('city',['Lookup']);
    // will restraint possible city value in droddown base on country and/or language.
    $l->addFilter('country', 'Country');
    $l->addFilter('language', 'Lang');
    //make sure country and language belong to your model.
    $l->setModel(new City($db));

    Closed issues:

    • Menu->addItem is not using App->url method #565
    • $grid->jsReload() does not show loading indicator #561
    • In CRUD form->error() is not treated correctly #558
    • DropDown with icons don't look nice #514
    • jsNotify->setDuration(0) message is not sown forever #478
    • Paginator should have ability to choose items per page #441

    Merged pull requests:

    • Set view as not rendered if there is exception #569 (@DarkSide666)
    • fix/ grid table overflow #568 (@ibelar)
    • Upgrading to Fomantic-UI #567 (@romaninsh)
    • fix #565, Menu->addItem URL treatment #566 (@DarkSide666)
    • feature/leftMenu option #564 (@ibelar)
    • Feature/js search auto query #563 (@ibelar)
    • $grid->jsReload not showing reload indicator #562 (@skondakov)
    • Feature/form submit hook in crud #560 (@DarkSide666)
    • Feature/Table Column Resizable #559 (@ibelar)
    • Fix LoremIpsum constructor (seed mechanism) #556 (@DarkSide666)
    • Feature/fix on change radio #555 (@DarkSide666)
    • add scrollbar if needed in modal #553 (@DarkSide666)
    • typo fix #552 (@DarkSide666)
    • Feature/support for serialized fields #548 (@romaninsh)
    • Implements FormField->onChange method #547 (@DarkSide666)
    • console->set() captures executon info/output. #546 (@romaninsh)
    Source code(tar.gz)
    Source code(zip)
  • 1.5.8(Aug 16, 2018)

    • Modals now support "null" title. Will remove extra spacing for the header too
    • Modal content height is now 100px minimum
    • Added $app->isJsonRequest(), detects xmlhttprequest and tabs
    • Dynamic and Static tabs now have consistent padding
    • $tabs->addTab()->setActive() can be used to automatically jump to tab on load
    • When using stand-alone $view->render() support for callbacks improved
    • jsModal::setOption() can be used to customize header and label.
    Source code(tar.gz)
    Source code(zip)
  • 1.5.7(Jul 26, 2018)

  • 1.5.6(Jul 26, 2018)

  • 1.5.5(Jul 24, 2018)

  • 1.5.4(Jul 5, 2018)

    This issue fixed a problem where modal windows coulddn't open when placed in a dynamic tab. There probably were some other situation where callbacks were not reachable, and this release should address them.

    Closed issues:

    • Add Filter Type Money #517
    • UploadField: should open dialog on "click" too not only on "focus" #511
    • UploadField compatibility with multiple jQuery #510
    • Enhancement: Make dropdown options visible when clicking into empty area between text and dropdown icon #502
    • Modal in Tab not working #500
    • AutoComplete not initializing with proper text #491

    Merged pull requests:

    Source code(tar.gz)
    Source code(zip)
  • 1.5.3(Jun 19, 2018)

    This release addresses problem Semantic UI is having with multiple modals. We will now hide existing modal if new one needs to be opened and after this new modal is closed it will be re-opened once again. The relevant issue is #487

    Closed issues:

    • Grid should have loader while reloading #493

    Merged pull requests:

    • Grid will display loader while fetching data #497 (ibelar)
    • fix/#487-Modal Behaviour #496 (ibelar)
    • fix/Persisitence-ui-for-reference-field #494 (ibelar)
    • atk4/ui/fix/#491 auto complete not initializing with proper text #492 (skondakov)
    Source code(tar.gz)
    Source code(zip)
  • 1.5.2(Jun 13, 2018)

    Closed issues:

    • Class 'atk4\ui\FormLayout\Exception' not found (in _Abstract.php) #480
    • App->initLayout 2nd parameter $options #476
    • allow to use icon in DropDown #473
    • implement custom form layout #465
    • TableColumn/Link doesn't evaluate as template #462

    Merged pull requests:

    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(May 16, 2018)

    Closed issues:

    • Why Dropdown field doesn't care about model field default value #463
    • Placing Form Fields inside layouts: Add "Region" parameter to addField #444
    • Autocomplete does not load values when in CRUD's modal: #438
    • AutoComplete does not work within Wizard #429
    • ApiService sometimes throw alert if the DIV is being removed while loading #421
    • Form Dropdowns do not show ... (empty selection) once something is selected #418

    Merged pull requests:

    Source code(tar.gz)
    Source code(zip)
A magic PHP framework. Build reactive web apps without writing HTML, CSS, or JavaScript! Powered by Tailwind, Alpine, Laravel, & Livewire.

Malzahar A magic PHP framework. Build reactive web apps without writing HTML, CSS, or JavaScript! Powered by Tailwind, Alpine, Laravel, & Livewire. Re

null 24 Aug 15, 2022
Bugsnag notifier for the Symfony PHP framework. Monitor and report errors in your Symfony apps.

Bugsnag exception reporter for Symfony The Bugsnag Notifier for Symfony gives you instant notification of errors and exceptions in your Symfony PHP ap

Bugsnag 42 Aug 23, 2022
Mind is the PHP code framework designed for developers. It offers a variety of solutions for creating design patterns, applications and code frameworks.

Mind Mind is the PHP code framework designed for developers. It offers a variety of solutions for creating design patterns, applications and code fram

null 0 Dec 13, 2021
FlyCubePHP is an MVC Web Framework developed in PHP and repeating the ideology and principles of building WEB applications, embedded in Ruby on Rails.

FlyCubePHP FlyCubePHP is an MVC Web Framework developed in PHP and repeating the ideology and principles of building WEB applications, embedded in Rub

Anton 1 Dec 21, 2021
Framework X – the simple and fast micro framework for building reactive web applications that run anywhere.

Framework X Framework X – the simple and fast micro framework for building reactive web applications that run anywhere. Quickstart Documentation Tests

Christian Lück 568 Sep 20, 2022
Source code of Ice framework

Ice framework Simple and fast PHP framework delivered as C-extension. Stage How to contribute? Fork the ice/framework repository. Create a new branch

ice framework 341 Jun 12, 2022
An intelligent code generator for Laravel framework that will save you time

An intelligent code generator for Laravel framework that will save you time! This awesome tool will help you generate resources like views, controllers, routes, migrations, languages and/or form-requests! It is extremely flexible and customizable to cover many of the use cases. It is shipped with cross-browsers compatible template, along with a client-side validation to modernize your application.

CrestApps 601 Sep 28, 2022
💫 Vega is a CLI mode HTTP web framework written in PHP support Swoole, WorkerMan / Vega 是一个用 PHP 编写的 CLI 模式 HTTP 网络框架,支持 Swoole、WorkerMan

Mix Vega 中文 | English Vega is a CLI mode HTTP web framework written in PHP support Swoole, WorkerMan Vega 是一个用 PHP 编写的 CLI 模式 HTTP 网络框架,支持 Swoole、Work

Mix PHP 46 Apr 28, 2022
A PHP framework for web artisans.

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

The Laravel Framework 71.1k Sep 25, 2022
Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs.

Slim Framework Slim is a PHP micro-framework that helps you quickly write simple yet powerful web applications and APIs. Installation It's recommended

Slim Framework 11.4k Sep 23, 2022
A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast!

A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast! Condensed in a single ~65KB file

Bong Cosca 2.6k Sep 25, 2022
Woski is a fast and simple lightweight PHP Framework for building applications in the realm of the web.

Woski is a simple fast PHP framework for the Realm The Project Installation Clone the repository $ composer create-project clintonnzedimma/woski myApp

Clinton Nzedimma 19 Aug 15, 2022
Biny is a tiny, high-performance PHP framework for web applications

Biny is high performance. Framework comes default with response time of less than 1ms. Stand-alone QPS easily up to 3000.

Tencent 1.7k Sep 27, 2022
ReikoFramework - The PHP Web Framework for simplicity

Reiko Framework - The PHP Web Framework for simplicity. What is Reiko? Reiko Framework is PHP Web framework for simplicity, if you need built web appl

shutdown57 3 Mar 8, 2022
TrailLamp is a lightweight, easy-to-use Php MVC framework that can be used to build web applications and REST APIs.

TrailLamp Introduction TrailLamp is a lightweight, easy-to-use Php MVC framework that can be used to build web applications and REST APIs. Installatio

Etorojah Okon 14 Jun 10, 2022
Flare is a PHP full-stack web framework that is light, fast, flexible, and secure.

Flare framework is a PHP full-stack web framework that is simple ,powerful , fast , flexible, and secure with long-term support.

Flare framework 3 Sep 23, 2022
Rori-PHP is custom non production web application framework inspired by Laravel syntax

Rori-PHP is custom non production web application framework inspired by Laravel syntax. A web framework provides a structure and starting point for your application allowing you to focus on creating something amazing.

UnknownRori 5 Jul 28, 2022
Opulence is a PHP web application framework that simplifies the difficult parts of creating and maintaining a secure, scalable website.

Opulence Introduction Opulence is a PHP web application framework that simplifies the difficult parts of creating and maintaining a secure, scalable w

Opulence 733 Sep 8, 2022