Skip to content

WARNING

You're browsing the documentation for an old version of Generator. Consider upgrading your project to Generator 0.3.x.

Usage

Create your first CRUD

Go to /generators/create if yo're using Full Version

/simple-generators/create for Simple Version

Below is table about supported input type & validation when you are using some column type.

Column TypeInput TypeValidationLength (min & max)
stringtext, textarea, email, telephone, password url, search, file, hiddenrequired, string
integernumber, range, hiddenrequired, numeric
texttext, textarea, email, telephone, password url, search, file, hiddenrequired, string
booleanradio, select, datalistrequired, boolean
chartext, color, week, email, telephone, password url, search, file, hiddenrequired, string
datedate, monthrequired, date
timetimerequired, date
yearselect, datalistrequired, numeric
dateTimedatetime-localrequired, date
decimalnumber, range, hiddenrequired, numeric
doublenumber, range, hiddenrequired, numeric
enumselect, radio, datalistrequired, in
floatnumber, range, hiddenrequired, numeric
foreignIdselect, datalistrequired, exist
tinyIntegernumber, range, hiddenrequired, numeric
mediumIntegernumber, range, hiddenrequired, numeric
bigIntegernumber, range, hiddenrequired, numeric
tinyTexttext, textarea, email, telephone, password url, search, file, hiddenrequired, string
mediumTexttext, textarea, email, telephone, password url, search, file, hiddenrequired, string
longTexttext, textarea, email, telephone, password url, search, file, hiddenrequired, string

required validation will change to nullable if you uncheck required switch in the form, if any input type password will automatically added confirmed validation, min:1|max:100 for supported length column and email|unique for email input type.

Create a Relation

Create Relation

For now is only support One To Many (Inverse) / Belongs To.

There is rules you must be followed if you want create a a relation:

  • Field name:
    • Must be the table name but in singular + _id, eg: if we have a users table then it must be a user_id.
  • Column Type:
    • Change to foreignId.
    • For constrain or related model name, you can fill with table name (automatically change to plural).
    • Action on update & delete:
      • On update: nothing, cascade, restrict
      • On delete: nothing, cascade, restrict, null

Make sure the related table & model already exist, if its no then the selected field for showing in select/datalist is an id, by default selected field is second column in related table.

Create an Upload File

Upload File

Set column type to string, input type to file, select file type (for now only support image), fill the max size(optional), and default value (must be a valid link), also we use Intervention Image for manipulating uploaded image. all setting for images are available at config/generator.php.

Default image configuration:

php
'image' => [
    /**
    * Path for store the image.
    *
    * available options:
    * 1. public
    * 2. storage
    */
    'path' => 'storage',

    /**
    * Will used if image is nullable and default value is null.
    */
    'default' => 'https://via.placeholder.com/350?text=No+Image+available',

    /**
    * Crop the uploaded image using intervention image.
    */
    'crop' => true,

    /**
    * When set to true the uploaded image aspect ratio will still original.
    */
    'aspect_ratio' => true,

    /**
    * Crop image size.
    */
    'width' => 500,
    'height' => 500,
],

if you are using storage for store the image, make sure you run php artisan storage:link

Create a Sidebar Menu

Create sidebar menu

This feature only available in full version.

You can easily create a dynamic sidebar menu with just a few inputs. all sidebar menus configuration are placed in config/generator.php

How about I don't need a dynamic sidebar menu, I just want to create my menu in blade. yeah, we provide it, click here how to do it.

Role & Permissions

While you are using the full version, after creating a new module will automatically generate some permissions and assign them to the role admin. all permissions are stored in config/permission.php

Here an example:

php
[
    'group' => 'products',
    'access' => [
        'product view',
        'product create',
        'product edit',
        'product delete'
    ]
],

Configuration

Below is the default config for the generator and sidebar menus:

php
<?php

return [
    /**
     * If any input file(image) as default will used options below.
     */
    'image' => [
        /**
         * Path for store the image.
         *
         * available options:
         * 1. public
         * 2. storage
         */
        'path' => 'storage',

        /**
         * Will used if image is nullable and default value is null.
         */
        'default' => 'https://via.placeholder.com/350?text=No+Image+available',

        /**
         * Crop the uploaded image using intervention image.
         */
        'crop' => true,

        /**
         * When set to true the uploaded image aspect ratio will still original.
         */
        'aspect_ratio' => true,

        /**
         * Crop image size.
         */
        'width' => 500,
        'height' => 500,
    ],

    'format' => [
        /**
         * Will used to first year on select, if any column type year.
         */
        'first_year' => 1900,

        /**
         * If any date column type will cast and display used this format, but for input date still will used Y-m-d format.
         *
         * another most common format:
         * - M d Y
         * - d F Y
         * - Y m d
         */
        'date' => 'd/m/Y',

        /**
         * If any input type month will cast and display used this format.
         */
        'month' => 'm/Y',

        /**
         * If any input type time will cast and display used this format.
         */
        'time' => 'H:i',

        /**
         * If any datetime column type or datetime-local on input, will cast and display used this format.
         */
        'datetime' => 'd/m/Y H:i',

        /**
         * Limit string on index view for any column type text or longtext.
         */
        'limit_text' => 100,
    ],

    /**
     * It will used for generator to manage and showing menus on sidebar views.
     *
     * Example:
     * [
     *   'header' => 'Main',
     *
     *   // All permissions in menus[] and submenus[]
     *   'permissions' => ['test view'],
     *
     *   menus' => [
     *       [
     *          'title' => 'Main Data',
     *          'icon' => '<i class="bi bi-collection-fill"></i>',
     *          'route' => null,
     *
     *          // permission always null when isset submenus
     *          'permission' => null,
     *
     *          // All permissions on submenus[] and will empty[] when submenus equals to []
     *          'permissions' => ['test view'],
     *
     *          'submenus' => [
     *                 [
     *                     'title' => 'Tests',
     *                     'route' => '/tests',
     *                     'permission' => 'test view'
     *                  ]
     *               ],
     *           ],
     *       ],
     *  ],
     *
     * This code below always changes when you use a generator and maybe you must lint or format the code.
     */
    'sidebars' => [
        [
            'header' => 'Main',
            'permissions' => [
                'test view'
            ],
            'menus' => [
                [
                    'title' => 'Main Data',
                    'icon' => '<i class="bi bi-collection-fill"></i>',
                    'route' => null,
                    'permission' => null,
                    'permissions' => [
                        'test view'
                    ],
                    'submenus' => [
                        [
                            'title' => 'Tests',
                            'route' => '/tests',
                            'permission' => 'test view'
                        ]
                    ]
                ]
            ]
        ],
        [
            'header' => 'Users',
            'permissions' => [
                'user view',
                'role & permission view'
            ],
            'menus' => [
                [
                    'title' => 'Users',
                    'icon' => '<i class="bi bi-people-fill"></i>',
                    'route' => '/users',
                    'permission' => 'user view',
                    'permissions' => [],
                    'submenus' => []
                ],
                [
                    'title' => 'Roles & permissions',
                    'icon' => '<i class="bi bi-person-check-fill"></i>',
                    'route' => '/roles',
                    'permission' => 'role & permission view',
                    'permissions' => [],
                    'submenus' => []
                ],
            ]
        ],
    ],
];

Production Setup

Because this package is only installed in development, so some files will not be included in the production environment. so you must do the following steps:

In composer.json add this code below:

json
"autoload": {
    "files": [
        "App/Generators/helper.php"
    ]
},
"extra": {
    "laravel": {
        "aliases": {
            "GeneratorUtils": "App\\Generators\\GeneratorUtils",
        }
    }
}

Then run

sh
composer dump-autoload