Quickly build an admin interface for your Eloquent models

Overview


GitHub last commit

Website | Documentation | Add-ons | Pricing | Services | Stack Overflow | Reddit | Blog | Newsletter

Quickly build an admin interface for your Eloquent models. Then customize every little detail. Among its features:

  • List operation
    • 24+ column types
    • 1-1, 1-n and n-n relationships
    • table view with search, pagination
    • click column header to sort by it
    • custom buttons
    • details row
    • bulk actions
    • easily create new column types
    • easily overwrite an existing column type
  • Create / Update operations
    • 50+ field types
    • back-end validation using Laravel Form Requests
    • translatable models (multi-language)
    • have multiple fields per line
    • split fields into tabs
  • Delete / Bulk Delete operations
  • Clone / Bulk Clone operations
  • Reorder operation
  • Revisions operation (audit log)

But professionals don't love Backpack just because it's feature-packed. They also love it because it's ridiculously easy to overwrite a functionality. Generally, you just need to create a function with the right name or create a blade file with the right name. Yes, it can be that easy. See why thousands of Laravel professionals have been using Backpack, every day, since 2016.

Screenshots

https://user-images.githubusercontent.com/1032474/86720524-c5a1d480-c02d-11ea-87ed-d03b0197eb25.gif

The GIF above should give you with a good idea about what Backpack will help you build. But you can also see it in action in our live demo, to get a deeper understanding of how Backpack admin panels look & feel and the amount of features it provides.

Getting started

Start with the "Getting Started" series in our docs. We try to nudge you towards creating a Backpack acccount, but you don't need one, if you're just trying it out.

Alternatively, if you don't have 20 minutes right now, subscribe to our drip email tutorial. You'll receive one email per day, for 5 days, 5 minutes each. By the end, you'll be familiar with how Backpack works, and be able to create admin panels for your Laravel apps.

Security updates and breaking changes

If you're using Backpack in production, please subscribe to the Backpack Newsletter so you can find out about any security updates, breaking changes or major features. We never ever share your email with anyone & we try to send as few emails as possible (1-4 emails per year). We hate unsolicited email too. But... you know... you're building an admin panel, security should be something you're up-to-date with.

Install

Installation guides:

Change Log

For the current release (4.1.x) please see the Releases tab. For previous versions (Backpack <=4.0.x), please see our old CHANGELOG file.

Contributing Guidelines

This project stands by The Whole Fruit Manifesto. We believe that “writing good code” is not only about “writing good code”. It’s also about the words around it. That’s why, to make sure your contribution is well received, we ask you to read and keep in mind the ONE=MOR framework and guidelines when writing comment blocks, PR titles, PR descriptions, and in general, when writing to our community.

For tasks & details about how you can help our project, please see CONTRIBUTING.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker. Alternatively, please disclose the issue on huntr.dev to also get a small bounty ($25-40).

It's heavily recommended that you subscribe to the Backpack Newsletter so you can find out about any security updates, breaking changes or major features. We send an email about 3-4 emails per year. Sometimes less.

Credits

Special thanks go to:

License

Backpack is dual-license:

  • FREE for non-commercial use
  • PAID for commercial use

Please see the License File and Pricing for more information.

Versioning

When installing Backpack, require its minor version (currently 4.1.*). For us, this is what major.minor.patch means:

  • major - PAID upgrade; MAJOR breaking changes; historically every 2-3 years; upgrading may take even 2-3 hours; includes major new features, major changes in how the whole system works, and complete rewrites; it allows us to considerably improve the product, and add features that were previously impossible;
  • minor - FREE upgrade; MINOR breaking changes; historically every 6-12 months; upgrading takes less than 30 minutes; it allows us to add big new features, for free;
  • patch - FREE upgrade; NO breaking changes; historically every week; upgrading can be done automatically with composer; includes bug fixes and non-breaking new features;

Hire us

We've spend more than 10.000 hours creating, polishing and maintaining administration panels on Laravel. We've developed e-Commerce, e-Learning, ERPs, social networks, payment gateways and much more. We've worked on admin panels so much, that we've created one of the most popular packages for Laravel - just from making public what was repetitive in our projects.

If you are looking for a developer/team to help you build an admin panel on Laravel, look no further. You'll have a difficult time finding someone with more experience & enthusiasm for admin panels. This is what we do. Contact us.

Comments
  • Translatable fields

    Translatable fields

    What about translatable fields? In my own project I use https://github.com/spatie/laravel-translatable and create new field with tabs for each language.

    URGENT 
    opened by OSDDQD 62
  • Can't use InlineCreate - array_filter() expects parameter 1 to be array, null given

    Can't use InlineCreate - array_filter() expects parameter 1 to be array, null given

    Hi,

    I wanna use the InlineCreate operation and do some things on create and update methods.

    When I have the request as argument : public function store(StoreRequest $request){ ... } I have this error : Too few arguments to function App\\Http\\Controllers\\Admin\\OrderItemCrudController::store(), 0 passed

    And when I remove request from argument, and use this in the method : $this->crud->request->request->get('...') I have this error : Cannot access protected property Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel::$request

    Is there a way to get the request with the InlineCreate operation ?

    Thanks for your help,

    Possible Bug could not reproduce 
    opened by KevinRignault 52
  • [Feature] Table field type

    [Feature] Table field type

    summary Enables users to add an array of items, with multiple columns if they need, with re-ordering and deleting.

    preview item array - edited

    usage

    database column type should be either json or text

    
    $this->crud->addField([
                'name' => 'products',
                'label' => 'Product',
                'type' => 'array',
                'properties' => [
                    'name' => 'Item Name',
                    'desc' => 'Description',
                    'price' => 'Price'
                ],
                'max' => 5,
                'min' => 0
            ]);
    
    $this->crud->setColumnDetails('products', [
                'type' => 'array',
                'display_field' => 'name',
                'label' => 'Products',
                'list' => true
            ]);
    
    
    opened by OwenMelbz 42
  • How to customize search query?

    How to customize search query?

    Hey there!

    I have to say, this was a wonderfully pleasant surprise to find. I've been looking for a usable Admin package for laravel for a few days and boom! Yours showed up. Wonderful work!

    I wanted to check in with you before I started diving in to deep: the model tables currently sort based on the entries currently in the view, but is there any wiring in place to order based on all the models in the database? If not, I'll dive in and see what I can contribute!

    opened by nathanielks 37
  • [4.0][Feature] Use modal/popup to add related item

    [4.0][Feature] Use modal/popup to add related item "on the fly"

    Imagine I want to add a task:

    bildschirmfoto 2017-04-05 um 19 01 35

    Priorität and Status are selects with related models. Now I would like to add a new item for Priorität on the fly without leaving this page.

    A nice solution would be a modal where I could add an item and after saving and closing the select list would be automatically updated.

    Does anyone already have implemented such a functionality?

    Feature Priority: MUST 
    opened by tswonke 36
  • Relationship fixes

    Relationship fixes

    Hello again guys! \o

    Here we are around relationships once again :D

    Short story short this can be seen as #3272 and #3250 merge.

    Let's break this down.

    Relationships: BelongsTo

    The foreign key is stored in the current model table. BelongsTo display as a select with the option to add new items via InlineCreate

    public function icon()
        {
            return $this->belongsTo(\App\Models\Icon::class, 'icon_id');
        }
    
    $this->crud->addField(['name' => 'icon']);
    
    

    Relationships: HasOne / MorphOne

    Both are very similar, the difference beeing the database structure. The key is in the foreign table as oposed to BelongsTo. There is no specific field for this relation, it displays the user desired field type. Supports BelongsTo relations in the foreign model.

    In backpack the usability of both is the same:

    // HasOne
    
    public function address()
        {
            return $this->hasOne(\App\Models\Address::class);
        }
    
    $this->crud->addFields([
         [
               'name'    => 'address.street',
               'label'   => 'Street column in address table',
         ],
         [
               'name'    => 'address.icon',
               'label'   => 'Icon is a BelongsTo relation in address model',
         ],
    ]);
    
    // MorphOne
    
    public function comment()
        {
            return $this->morphOne(\App\Models\Comment::class, 'commentable');
        }
    
    $this->crud->addField([
         [
               'name'    => 'comment.text',
               'type' => 'ckeditor',
               'label'   => 'text column in comments table',
         ],
    ]);
    

    image

    Relationships: HasMany / MorphMany

    They are similar but at the same time kind of different. The key is stored in the foreign model table.

    There are two ways of dealing with this relationship, either using a select to select from a prefefined list of items, or creating the items along with the model.

    Let's first break down the HasMany.

    public function postalboxes()
        {
            return $this->hasMany(\App\Models\PostalBox::class);
        }
    

    Developer can setup this relation to be a select:

    [
                    'name'    => 'postalboxer',
                    'label'   => 'HasMany - selectable',
                    // 'force_delete' => true, //optional - explained bellow
                ], 
    

    When using this approach backpack does not impose a way of dealing with the data. The default behavior is:

    • check if developer provided a fallback_id, this key can be used in case database column is NOT nullable but developer don't want to delete the entry (the selectable option) from database.
    • check if the column is nullable, if it is, set the value of the connected key to null.
    • if no fallback is provided, and null cannot be used in database we just delete it.

    The optional force_delete => true say backpack that even if column is nullable in database, we should delete the entry when removed from selections.

    This was the behaviour intended in https://github.com/Laravel-Backpack/CRUD/pull/1453 I think.

    This select approach is available also in MorphMany but does not make much sense to use it there as the morph table requires morphable_type and morphable_id.

    For MorphMany and the HasMany creatables it's recommended to use the new repeatable field to create the related items.

    
    // MorphMany
    
    public function stars()
        {
            return $this->morphMany(\App\Models\Star::class, 'starable');
        }
    
    $this->crud->addField([
        [
            'name'    => 'stars',
            'label'   => 'MorphMany - Starts',
            'pivotFields' => [
                [
                    'name' => 'title',
                    'type' => 'text',
                ]
            ],
        ]
    ]); 
    
    

    Behind the scenes this field would be converted to a repeatable field that would allow to create the amount of desired stars. Same for HasMany :

     public function postalboxes()
        {
            return $this->hasMany(\App\Models\PostalBox::class);
        }
    
    $this->crud->addField([
        [
            'name'    => 'postalboxes',
            'label'   => 'HasMany - creatable',
            'pivotFields' => [
                [
                    'name' => 'postal_name',
                    'type' => 'text',
                ]
            ],  
        ]
    ]);  
    
    

    image

    Relationships: BelongsToMany / MorphToMany

    They are both very simillar so is the usability in backpack.

    Both provide both interfaces select and repeatable. The select best for when we just want to connect two entities. The repeatable when we want to deal with pivot data.

    REPEATABLE

    IMPORTANT: to work with pivot tables you need to explicitly tell what pivot fields you are about to edit using ->withPivot() from Laravel.
    
    public function recommends()
        {
            return $this->morphToMany(\App\Models\Recommend::class, 'recommendable')->withPivot('text');
        }
    public function dummyproducts()
        {
            return $this->belongsToMany(\App\Models\Product::class, 'monster_productdummy')->withPivot('notes');
        }
    
    $this->crud->addField([
        [
            'name'    => 'recommends',
            'label'   => 'MorphToMany Recommends - with pivot fields',
            'pivotFields' => [
               [
                'name' => 'text',
                'type' => 'text',
               ]
            ],
        ],
    ]);
    
    $this->crud->addField([
        [
            'name'    => 'dummyproducts',
            'label'   => 'BelongsToMany - with aditional pivot fields',
            'pivot_wrapper' => [ //optional explained below
                'class' => 'form-group col-md-6',
            ],
            'pivotFields' => [
               [
                'name' => 'notes',
                'type' => 'text',
                'wrapper' => [
                    'class' => 'form-group col-md-6',
                ]
               ]
            ],
        ],
    ]);
    

    The interface for this field is common for both, a Selectable Entity to relate and the optional pivot fields to add along.

    image

    pivot_wrapper configures the wrapper for the select of related entry.

    You can also pass along more options like ajax and data_url etc, they will be streamlined for your "Select Related". Basically the options you could pass to any relationship field, but pivot_wrapper needed to be overwritten because the "main" repeatable field also has a wrapper.

    SELECT

    To work with this relations as regular select you don't need to provide the withPivot. You will also be able to create new "relatable entities" using inline create.

    public function products()
        {
            return $this->belongsToMany(\App\Models\Product::class, 'monster_product');
        }
    
    public function bills()
        {
            return $this->morphToMany(\App\Models\Bill::class, 'billable');
        }
    
    $this->crud->addField([
        [
            'name'    => 'bills',
            'label'   => 'MorphToMany Bills - selectable',
        ],
    ]); 
    

    image

    I'v created https://github.com/Laravel-Backpack/demo/pull/218 in demo that has all this relationships setup, tables etc.

    Don't forget migrate & seed.

    URGENT Priority: MUST 
    opened by pxpm 35
  • [Feature Proposal] Conditional fields (aka. hide/show fields depending on other fields, aka. toggle field visibility)

    [Feature Proposal] Conditional fields (aka. hide/show fields depending on other fields, aka. toggle field visibility)

    This is the most upvoted feature in our feature poll. So it's the first one we can tackle, now that we have v5 ready for launch.

    Let's do this!!! 💪

    The Problem

    I've studied all previous PRs for this:

    • 2016 - https://github.com/Laravel-Backpack/CRUD/pull/165
    • 2018 - https://github.com/Laravel-Backpack/CRUD/pull/1257
    • 2020 - https://github.com/Laravel-Backpack/CRUD/pull/3420
    • 2021 - https://github.com/Laravel-Backpack/CRUD/pull/3753

    As I said in https://github.com/Laravel-Backpack/addons/issues/11 ... this is a tricky problem to solve... because the developer needs can be so very different. In various places, people ask:

    • for the "source" to be a select, others radio, checkbox, checklist, select2_from_array, etc;
    • for the "source" to be multiple fields, not just one;
    • for the "action" to be "hiding";
    • for the "action" to be "showing";
    • for the "action" to be "hiding and disabling";
    • for the "action" to be "calculating the value";

    I'm ashamed we haven't done anything to solve this until now. Literal shame. But... the reason we haven't merged any of those... is that I didn't see way for us to cover what most devs need, most of the time. We would only be covering a particular use case, which would most certainly have meant we would be adding features and niche use cases to it for years, as people report them. And that simply wasn't a good idea, to take on such a big maintenance burden... when it's not that difficult to do it in JS, for the people who needed it. You could do it in create.js and update.js and you have a solution, for your project alone, with maximum customizability. That's why I've been suggesting "creating an addon for it" to devs who have made PRs for this... because they were niche solutions, and for sure somebody would have used it... but not everybody would have been happy with it.

    I didn't see how we can build this feature/field/whatever so that most people will be happy with it. But now... I think I do. And it's sort of what @pxpm suggested here... but without the AJAX calls, which I think are unproductive and bound to fail.

    And thanks to the open-core split... we can start adding more and more feature, right into backpack/pro.

    The Solution

    What if... instead of wanting to define the JS behavior in PHP... we accept we have to write a little bit of JS for this? And have Backpack make that bit of JS so easy to write, it's a pleasure? In Backpack v5, thanks to the script widget, we can do:

    Widget::add()->type('script')->content(asset('/path/to/js/file.js'));
    

    So what if...

    Step 1. We make it even easier, by providing a convenience method on CRUD, that also allows for inline content. Something like:

    CRUD::addJavascript('/path/to/js/file.js');
    
    // or even
    
    CRUD::addJavascript("alert('what you want to be done here')");
    

    Step 2. We make it dead-simple to write ALL of the combinations above, by providing a selector and a few actions on the crud javascript object (it's already onpage, usually used for working with DataTables). So that what JS you actually write looks like this:

    // option 1 - probably needs jQuery
    crud.field('agree').on("change", function() {
        crud.field('price').show();
    });
    crud.field('agree').onChange(function() {
        crud.field('price').show();
    });
    
    // option 2 - maybe doesn't need jQuery
    crud.field('agree').addEventListener("change", function() {
        crud.field('price').show();
    });
    
    // of course, you should be able to do a few other stuff with your `fields`, but the minimum would be:
    crud.field('price').show();
    crud.field('price').hide();
    crud.field('price').disable();
    crud.field('price').enable();
    crud.field('price').value(); // aka .setValue(), aka .val()
    

    I believe this would solve all cases people have already expressed... but also fix the cases people haven't expressed yet. Which I'm sure will come up, in real apps, right after we introduce a feature with limited customizability. But by moving this logic to JS... it opens up the possibility for you to do... anything you want. It's JS, and you have complete control.


    Thoughts, anyone? Am I missing something? Or is this a solution we could all get behind? I'm eager to prototype this, to see if we can launch it with Backpack v5 this week 🎉 I have a feeling it's either a lot simpler than I expect... or a lot more difficult 😅

    Can't tell if this idea is incredibly good... or incredibly stupid 😅 Let me know.

    Feature Request Priority: MUST 
    opened by tabacitu 34
  • Why require CrudRequest...?

    Why require CrudRequest...?

    Bug report

    What I did:

    I created a FormRequest like I would normally do with Laravel...via art make:request StoreFooRequest. I updated the CRUD controller's store() method to use this request.

    What I expected to happen:

    Once the validation on the form request passed, then the new data would be stored.

    What happened:

    Type error: Argument 1 passed to Backpack\CRUD\app\Http\Controllers\CrudController::storeCrud() must be an instance of Backpack\CRUD\app\Http\Requests\CrudRequest or null, instance of App\Http\Requests\StoreFooRequest given

    What I've already tried to fix it:

    Not much, other than to take a quick look at Backpack\CRUD\app\Http\Requests\CrudRequest to see what was so special about it.

    Backpack, Laravel, PHP, DB version:

    More or less the latest, across the board.

    Extra:

    Perhaps I've missed something, but Backpack\CRUD\app\Http\Requests\CrudRequest appears to add no value. It seems that Backpack\CRUD\app\Http\Controllers\CrudController::storeCrud() should require Illuminate\Foundation\Http\FormRequest (or some sufficient contract/interface).

    I'd be happy to put together a quick PR, but I wanted to find out if this would be a waste of time before I did it and to perhaps figure out why this might not be a good idea.

    opened by telkins 34
  • allow repeatable fields to be sent with form on ajax requests

    allow repeatable fields to be sent with form on ajax requests

    refs: #3218

    Problem: When using include_all_form_fields with ajax fields the repeatable values in the form would not be sent with the request because they only got their value parsed when the submit button in the main form is pressed.

    Solution: Create an event handler in repeatable fields that we can fire when doing the ajax request and parse the values of the repeatable instances to be sent along with the main form fields.

    Bug Priority: MUST affected-by-open-core-split 
    opened by pxpm 31
  • [BUG] No export buttons on version 3.5

    [BUG] No export buttons on version 3.5

    Bug report

    I believe export buttons feature was forgotten with this update, as far as I understood, the div id='datatable_button_stack' is not in the list.blade.php.

    What I did:

    Added the export function $this->crud->enableExportButtons();.

    What I've already tried to fix it:

    I added the div next to the search stack div in the list.blade.php file, and it started to work.

    <div class="col-xs-6">
        <div id="datatable_button_stack" class="pull-right"></div>
        <div id="datatable_search_stack" class="pull-right"></div>
    </div>
    

    This causes a kind of design flaw, because the buttons there are not very beautiful :) image

    Backpack, Laravel, PHP, DB version:

    CRUD 3.5

    triage 
    opened by promatik 31
  • laravel backpack upload field is not moving image to my path, but its storing path to database

    laravel backpack upload field is not moving image to my path, but its storing path to database

    controller

     $this->crud->addField([   // Upload
        'name' => 'image',
        'label' => 'Image',
        'type' => 'upload',
        'upload' => true,
        'disk' => 'uploads' // if you store files in the /public folder, please ommit this; if you store them in /storage or S3, please specify it;
    ]);
    

    model

    public function setImageAttribute($value)
        {
            $attribute_name = "image";
            $disk = "public";
            $destination_path = "/uploads";       
            $this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
        }
    

    config/filesystem.php

    'uploads' => [
                        'driver' => 'local',
                        'root' => public_path().'/uploads',
                        // 'url' => '/photos/',
                        // 'visibility' => 'public',
                    ],
    
    Ask-It-On-Stack-Overflow 
    opened by Himani-Bhatt 30
  • Image column support private bucket

    Image column support private bucket

    WHY

    BEFORE - What was wrong? What was happening before this PR?

    If the file is stored in a private S3 or private S3 compatible bucket, the image fetching will fail. This PR was modify based on https://github.com/Laravel-Backpack/CRUD/pull/4466

    AFTER - What is happening after this PR?

    If 'temporary' key is true, use temporaryUrl() instead of url() and support param "expire" to set expiration time in minutes.

    HOW

    How did you achieve that, in technical terms?

    This PR is thanks to @ziming based on this PR https://github.com/Laravel-Backpack/CRUD/pull/4466

    Is it a breaking change?

    No

    How can we test the before & after?

    Create a private S3 bucket, dump some files there and try.

    opened by jorgetwgroup 1
  • [WIP] Main without assets

    [WIP] Main without assets

    WHY

    Because we had 4000+ CSS and JS files in CRUD, so the v6 to main diff was unusable. Now, we point v6 to main-without-assets. That way, we can actually tell what the differences are.

    When everything's ready to merge, we can merge everything into main:

    • this branch (main-without-assets)
    • v6
    • any other feature branches that hadn't been merged to v6
    Priority: MUST 
    opened by tabacitu 1
  • Switch to using accessible colours - a darker purple [Feature Request]

    Switch to using accessible colours - a darker purple [Feature Request]

    Hello,

    We're using Backpack on a project but have noticed that the purple you use is not accessible on a white background (nor is the blue alternative).

    They both fail to meet WCAG AA colour contrast ratio. Whilst we're aware that we can create overrides for these, it would be nice for the wider world (and especially those with any visual impairments) to have this available by default.

    Alternatively, a simple-to-implement "primary colour" configuration variable would be great, so that we could change this to something accessible without needing to go through the full custom config route.

    Thank you.

    Pasted image from https://webaim.org/resources/contrastchecker/: image

    Feature Request 
    opened by lukew-cogapp 1
  • [Bug] Mutator don't triggered with extra pivot when save file in subfield

    [Bug] Mutator don't triggered with extra pivot when save file in subfield

    Bug report

    Hi,

    I tried to save files in the pivot table, but when I saved, I got this output in the database: [{}]. My setDiplomaDocumentAttribute() function does not seem to be used.

    What I did

    CRUD :

     'subfields' => [ 
                                [
                                    'name'      => 'diploma_document',
                                    'label'     => 'Fichiers',
                                    'type'      => 'upload_multiple',
                                    'upload'    => true,
                                    'wrapper' => [
                                        'class' => 'form-group col-md-9',
                                    ],
                                ],
                            ],
    

    Model:

    public function diplomas()
        {
            return $this->belongsToMany(Diploma::class, 'user_diploma','user_id','diploma_id')->withPivot('diploma_document');
        }   
        
    public function setDiplomaDocumentAttribute($value)
        {
            $attribute_name = "diploma_document";
            $disk = "local";
            $destination_path = "diploma_documents";
    
            $this->uploadMultipleDiplomasToDisk($value, $attribute_name, $disk, $destination_path);
        }
    

    What I expected to happen

    Files are saved

    What happened

    Files is not saved and the value [{}] appears in the database.

    What I've already tried to fix it

    I tried to call the function in CRUD but I get a [null] value in the database.

    'subfields' => [ 
                                [
                                    'name'      => 'diploma_document',
                                    'label'     => 'Fichiers',
                                    'type'      => 'upload_multiple',
                                    'upload'    => true,
                                    'function'  => function($entry){
                                        $entry->setDiplomaDocumentAttribute();
                                    },
                                    'wrapper' => [
                                        'class' => 'form-group col-md-9',
                                    ],
                                ],
                            ],
    

    Backpack, Laravel, PHP, DB version

    PHP VERSION:

    PHP 8.1.3 (cli) (built: Feb 16 2022 08:20:53) (NTS Visual C++ 2019 x64) Copyright (c) The PHP Group Zend Engine v4.1.3, Copyright (c) Zend Technologies

    LARAVEL VERSION:

    v9.45.1@faeb20d3fc61b69790068161ab42bcf2d5faccbc

    BACKPACK VERSION:

    5.4.11@ffbadcdb6478822646600b2cd763490caa927155

    triage 
    opened by Matthieu24 1
  • Check if spatie/media-library works with current Backpack fields

    Check if spatie/media-library works with current Backpack fields

    Here's what Pedro and I though about... we might already support spatie/media-library... just know know it or have it document it. The only thing you need to actually use that library is change the way you get and set your files on your model.

    Well... you can easily do that in Backpack v5... using model events... https://backpackforlaravel.com/docs/5.x/release-notes#define-model-events-directly-on-fields

    Pedro, please check if we already support this. If we do... woohoo 🎉 Let's document / make it easier / smth.

    Priority: MUST 
    opened by tabacitu 0
Releases(5.4.14)
  • 5.4.14(Jan 5, 2023)

  • 5.4.13(Dec 29, 2022)

    Changes

    • [hot-fix] Fix error on new Backpack installs - Target class [Backpack\CRUD\app\Http\Middleware\AuthenticateSession] does not exist. (#4861 - thanks to @pxpm)
    • remove extra parenthesis (#4859 - thanks to @pxpm)
    Source code(tar.gz)
    Source code(zip)
  • 5.4.12(Dec 27, 2022)

    Changes

    • fix error display when using prefix in fields (#4836 - thanks to @pxpm)
    • Revert "Add password field support for default value" (#4857 - thanks to @tabacitu)
    • use temporary disk in column too (#4852 - thanks to @pxpm)
    • [Bug] Can't change column key fluently (#4820 - thanks to @pxpm)
    • Fix CrudFilter initialization from static class method. (#4822 - thanks to @pxpm)
    • remove anonymous function (#4529 - thanks to @pxpm)
    • AuthenticatesSessions contract doesn't exist in L8 (#4849 - thanks to @pxpm)
    • use field validation directly in getting started tutorial (#4845 - thanks to @tabacitu)
    • wrap the delete button script in a @loadOnce directive (#4834 - thanks to @pxpm)
    • more tests (#4824 - thanks to @pxpm)
    • use request set in crud instead of global request instance (#4823 - thanks to @pxpm)
    • add configuration option to token expiration time (#4825 - thanks to @pxpm)
    • Add more tests, attempt to fix coverage color (#4821 - thanks to @pxpm)

    ⚙️ Changes

    • Bump tinymce from 5.10.5 to 5.10.7 (#4829 - thanks to @dependabot)
    • Bump datatables.net-bs4 from 1.12.1 to 1.13.1 (#4800 - thanks to @dependabot)
    • Bump loader-utils from 1.4.1 to 1.4.2 (#4776 - thanks to @dependabot)
    • Bump datatables.net from 1.12.1 to 1.13.1 (#4801 - thanks to @dependabot)
    • Bump vue-template-compiler from 2.7.10 to 2.7.14 (#4804 - thanks to @dependabot)
    • Bump sass from 1.55.0 to 1.56.1 (#4806 - thanks to @dependabot)
    • Bump ckeditor4 from 4.20.0 to 4.20.1 (#4807 - thanks to @dependabot)
    Source code(tar.gz)
    Source code(zip)
  • 5.4.11(Dec 6, 2022)

    Changes

    • Fixed shifted column headers and vertical middle alignment (#4780 - thanks to @promatik)
    • Code coverage reporter (#4797 - thanks to @pxpm)
    • Add tests (#4778 - thanks to @pxpm)
    • account for the possibility that save actions are not defined (#4810 - thanks to @pxpm)
    • [Bug] Missing query bindings lead to error when using withCount in the query. (#4796 - thanks to @pxpm)
    • fix how to contribute tutorial link (#4811 - thanks to @pxpm)
    Source code(tar.gz)
    Source code(zip)
  • 5.4.10(Nov 30, 2022)

    What's Changed

    • fix save actions by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4795

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/5.4.9...5.4.10

    Source code(tar.gz)
    Source code(zip)
  • 5.4.9(Nov 30, 2022)

    Changes

    • add backpack:publish-assets command that publishes CSS and JS assets (#4782 - thanks to @tabacitu)
    • Phone field (#4761 - thanks to @jorgetwgroup)
    • switch anchors for buttons (#4794 - thanks to @pxpm)
    Source code(tar.gz)
    Source code(zip)
  • 5.4.8(Nov 28, 2022)

    Changes

    • Add password field support for default value (#4783 - thanks to @maurohmartinez)
    • Fix alias name for msslq (#4784 - thanks to @pxpm)
    • Don't exclude raw expression columns (#4788 - thanks to @pxpm)
    • [Bug Fix] Save actions inside dropdown don't trigger HTML5 Validation (#2340 - thanks to @pxpm)
    • make distinction between inline inputs and main form inputs (#4714 - thanks to @pxpm)
    • Replace likely typo getCleanFields() with getCleanStateFields(); fixes #4765 (#4767 - thanks to @dandarie)
    • use reflection to work with php enum classes (#4741 - thanks to @pxpm)
    • [Feature] Logout other devices upon password change (#3645 - thanks to @tabacitu)

    ⚙️ Changes

    • Bump loader-utils from 1.4.0 to 1.4.1 (#4769 - thanks to @dependabot)
    • Bump actions/checkout from 2 to 3 (#4738 - thanks to @dependabot)
    Source code(tar.gz)
    Source code(zip)
  • 5.4.7(Oct 31, 2022)

  • 5.4.6(Oct 27, 2022)

    Changes

    • add null checking for options when it's a string in a morphMap (#4743 - thanks to @pxpm)
    • Add fileName parameter to uploadFileToDisk function (#4742 - thanks to @pxpm)
    Source code(tar.gz)
    Source code(zip)
  • 5.4.5(Oct 25, 2022)

    Changes

    • Add @method tags for autocomplete idea helper (#3831 - thanks to @egyjs)
    • dependabot for github action dependencies (#4644 - thanks to @ziming)
    • [Bugfix] Cast value to int for switch field (#4736 - thanks to @susanu)
    • check if property is empty in request (#4729 - thanks to @pxpm)
    • add translation string for new google map field (#4684 - thanks to @pxpm)
    • Bump ckeditor4 from 4.19.1 to 4.20.0 (#4688 - thanks to @dependabot)
    • Bump easymde from 2.17.0 to 2.18.0 (#4690 - thanks to @dependabot)
    • Bump sass from 1.54.8 to 1.55.0 (#4692 - thanks to @dependabot)
    Source code(tar.gz)
    Source code(zip)
  • 5.4.4(Oct 21, 2022)

    Changes

    • fix #4732 - Process missing in Install command (#4733 - thanks to @tabacitu)
    • Fix attribute infering (#4728 - thanks to @pxpm)
    • Remove width 100% and add to input (#4724 - thanks to @jorgetwgroup)
    Source code(tar.gz)
    Source code(zip)
  • 5.4.3(Oct 19, 2022)

  • 5.4.2(Oct 17, 2022)

    What's Changed

    • fix 1px bump on select2 by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4719

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/5.4.1...5.4.2

    Source code(tar.gz)
    Source code(zip)
  • 5.4.1(Oct 17, 2022)

  • 5.4.0(Oct 17, 2022)

    Major New Features

    • PHP Enums support (#4678 - thanks to @pxpm)
    • Morphto v2 - with ajax support (#4579 - thanks to @pxpm)
    • support for millions (and billions) of records:
      • optimizations for query count (#4699 - thanks to @pxpm)
      • Fix database count, option to disable counting (#4502 - thanks to @pxpm)
      • add total query property to CrudPanel object (#4697 - thanks to @tabacitu)
      • Cache DB schema info to avoid huge DB table info calls (#4649 - thanks to @pxpm)

    Minor Features

    • Add Thai Translations (#4706 - thanks to @ton212)
    • Infer attribute from entity string (#4621 - thanks to @pxpm)
    • Validates user connection on backpack install (#4670 - thanks to @promatik)
    • Render errors from "any" error bag that is sent on the CrudRequest (#4687 - thanks to @pxpm)
    • Add List order support for translatable models (#4645 - thanks to @pxpm)

    Bug Fixes

    • Avoid bulk checkbox to pollute the first column in exported files (#4701 - thanks to @promatik)
    • check if pro is enable before using table field (#4713 - thanks to @pxpm)
    • Add a schema check before attempting to get the columns (#4712 - thanks to @pxpm)
    • add sql checks to avoid breaking nosql databases (#4700 - thanks to @pxpm)
    • remove model schema store (#4705 - thanks to @pxpm)
    Source code(tar.gz)
    Source code(zip)
  • 5.3.13(Sep 30, 2022)

    What's Changed

    • Progress block fixes for multiline text by @promatik in https://github.com/Laravel-Backpack/CRUD/pull/4656
    • remove path separator from begin of string by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4643
    • Add methods into view namespaces to avoid BC by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4664
    • Add config for backpack_email_column by @jorgetwgroup in https://github.com/Laravel-Backpack/CRUD/pull/4662
    • Fix to allow export of input/select by @promatik in https://github.com/Laravel-Backpack/CRUD/pull/4659
    • Add method to get widget attributes by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4661
    • add missing translation to upload_multiple by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4681
    • Fix Reorder When Page is RTL by @EGYWEB-Mohamed in https://github.com/Laravel-Backpack/CRUD/pull/4672
    • GitHub Workflows security hardening by @sashashura in https://github.com/Laravel-Backpack/CRUD/pull/4677

    New Contributors

    • @sashashura made their first contribution in https://github.com/Laravel-Backpack/CRUD/pull/4677

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/5.3.12...5.3.13

    Source code(tar.gz)
    Source code(zip)
  • 5.3.12(Sep 7, 2022)

    What's Changed

    • Work around for specific PRO versions by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4651

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/5.3.11...5.3.12

    Source code(tar.gz)
    Source code(zip)
  • 5.3.11(Sep 5, 2022)

    What's Changed

    • Fix typehint for query property in CrudPanel/Traits/Query.php by @jnoordsij in https://github.com/Laravel-Backpack/CRUD/pull/4641
    • Added askHint helper on PrettyCommandOutput by @promatik in https://github.com/Laravel-Backpack/CRUD/pull/4646

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/5.3.10...5.3.11

    Source code(tar.gz)
    Source code(zip)
  • 5.3.10(Sep 5, 2022)

    Changes

    • Added askHint helper on PrettyCommandOutput (#4646 - thanks to @promatik)
    • Fix typehint for query property in CrudPanel/Traits/Query.php (#4641 - thanks to @jnoordsij)
    • remove duplicate spinner (#4637 - thanks to @pxpm)
    • updated case from "Crud" to "CRUD" in CrudButton.php and CrudFilter.php (#4635 - thanks to @TbishopP)
    Source code(tar.gz)
    Source code(zip)
  • 5.3.9(Sep 1, 2022)

    What's Changed

    • update CrudButton.php by @tabacitu in https://github.com/Laravel-Backpack/CRUD/pull/4634
    • fix wrong datatable row colors by @tabacitu in https://github.com/Laravel-Backpack/CRUD/pull/4636

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/5.3.8...5.3.9

    Source code(tar.gz)
    Source code(zip)
  • 5.3.8(Sep 1, 2022)

    Changes

    • make fields wrapper optional (#4625 - thanks to @pxpm)
    • Make routes and sidebar links blue (#4631 - thanks to @promatik)

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/5.3.7...5.3.8

    Source code(tar.gz)
    Source code(zip)
  • 5.3.7(Aug 31, 2022)

    What's Changed

    This is a re-do of 3.5.6 (hotfix for #4629)

    • Extend config to support custom Vite styles and scripts by @Kovah in https://github.com/Laravel-Backpack/CRUD/pull/4522
    • Fix select2 input focus & select2 multiple input remove by @jorgetwgroup in https://github.com/Laravel-Backpack/CRUD/pull/4615
    • Add style focus to select2 by @jorgetwgroup in https://github.com/Laravel-Backpack/CRUD/pull/4616
    • Update Backpack to work with Octane. by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4542
    • make select2 halo similar to other fields by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4624
    • remove extra parenthesis from checklist dependency by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4627
    • ran npm update by @tabacitu in https://github.com/Laravel-Backpack/CRUD/pull/4628

    New Contributors

    • @Kovah made their first contribution in https://github.com/Laravel-Backpack/CRUD/pull/4522

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/5.3.6...5.3.7

    Source code(tar.gz)
    Source code(zip)
  • 5.3.6(Aug 31, 2022)

    Changes

    • ran npm update (#4628 - thanks to @tabacitu)
    • remove extra parenthesis from checklist dependency (#4627 - thanks to @pxpm)
    • make select2 halo similar to other fields (#4624 - thanks to @pxpm)
    • Update Backpack to work with Octane. (#4542 - thanks to @pxpm)
    • Add style focus to select2 (#4616 - thanks to @jorgetwgroup)
    • Fix select2 input focus & select2 multiple input remove (#4615 - thanks to @jorgetwgroup)
    • Extend config to support custom Vite styles and scripts (#4522 - thanks to @Kovah)
    • Fix select2 first focus (#4614 - thanks to @jorgetwgroup)
    • Avatar without email (#4599 - thanks to @jorgetwgroup)
    Source code(tar.gz)
    Source code(zip)
  • 5.3.5(Aug 23, 2022)

    Changes

    • fix str_repeat error (#4613 - thanks to @tabacitu)
    • call request parameters directly from InputBag (#4602 - thanks to @pxpm)
    • Update infoPostFix in italian language (#4611 - thanks to @pxpm)
    • [bug] Scoped HasMany relations - incorrect delete entries (#4554 - thanks to @pxpm)
    • mention Newsletter and Premium addons in Getting Started widget (#4609 - thanks to @tabacitu)
    Source code(tar.gz)
    Source code(zip)
  • 5.3.4(Aug 15, 2022)

    Bug Fixes

    • CrudFields - Subfields callbacks on the fly (#4598 - thanks to @promatik)
    • Fixed a typo and added the type of $query (#4596 - thanks to @ajaxray)
    • clear selections not found in filtered results (#4556 - thanks to @pxpm)
    • fix datatable persistency when manually filtering (#4558 - thanks to @pxpm)
    • Fix column key definition (#4548 - thanks to @pxpm)
    • fix shift select bulk actions (#4557 - thanks to @pxpm)
    • Fix reorder operation - after dropping the item, all items expand (#4547 - thanks to @promatik)
    • Replace HTML comments with Blade comments (#4594 - thanks to @promatik)
    • Improve PHPDoc of CheckIfAdmin middleware (#4592 - thanks to @phpfour)
    • Update PHPDoc of addFilter and addFilterToCollection (#4574 - thanks to @Diegslapasteque)

    Features

    • [Feature] Repeatable field focuses on first focusable input (#4491 - thanks to @maurohmartinez)
    Source code(tar.gz)
    Source code(zip)
  • 5.3.3(Aug 9, 2022)

  • 5.3.2(Aug 8, 2022)

    Changes

    • use APP_ENV instead of app()->env in show_getting_started (#4589 - thanks to @tabacitu)
    • remove deprecated strftime() in PHP 8.1 (#4585 - thanks to @pxpm)
    Source code(tar.gz)
    Source code(zip)
  • 5.3.1(Aug 8, 2022)

    Changes

    • Show getting started widget on dashboard (on localhost) (#4577 - thanks to @tabacitu)
    • stop mentioning Backpack/Base (#4575 - thanks to @tabacitu)
    • Update PHPDoc of getRequest with '\Illuminate\Http\Request' (#4572 - thanks to @emrancu)
    Source code(tar.gz)
    Source code(zip)
  • 4.1.71(Aug 8, 2022)

    What's Changed

    • remove deprecated strftime in 4.1 branch by @pxpm in https://github.com/Laravel-Backpack/CRUD/pull/4586

    Full Changelog: https://github.com/Laravel-Backpack/CRUD/compare/4.1.70...4.1.71

    Source code(tar.gz)
    Source code(zip)
  • 5.3.0(Aug 2, 2022)

    Changes

    • Huge Improvements to php artisan backpack:install command (#4559 - thanks to @promatik)
    • [bug] fix when ConvertEmptyStringsToNull is disabled for M-M relations (#4528 - thanks to @basselhossam)
    • Update README.md (#4567 - thanks to @tabacitu)
    • use main branch for release-drafter (#4566 - thanks to @tabacitu)
    • trigger the delete events for each of related deleted model (#4543 - thanks to @pxpm)

    Dependency bumps

    • Bump sass from 1.52.2 to 1.54.0 (#4562 - thanks to @dependabot)
    • Bump ckeditor4 from 4.19.0 to 4.19.1 (#4565 - thanks to @dependabot)
    • Bump vue-template-compiler from 2.7.0 to 2.7.8 (#4564 - thanks to @dependabot)
    Source code(tar.gz)
    Source code(zip)
Owner
Backpack for Laravel
A collection of packages to create custom admin panels in hours, not days.
Backpack for Laravel
Build a full-featured administrative interface in ten minutes

⛵ laravel-admin is administrative interface builder for laravel which can help you build CRUD backends just with few lines of code. Documentation | 中文

Song 10.7k Dec 30, 2022
An account management Panel based on Laravel7 framework. Include multiple payment, account management, system caching, admin notification, products models, and more.

ProxyPanel 简体中文 Support but not limited to: Shadowsocks,ShadowsocksR,ShadowsocksRR,V2Ray,Trojan,VNET Demo Demo will always on dev/latest code, rather

null 17 Sep 3, 2022
dcat-admin's extension that was build in one package by vue

Dcat Admin Extension 此扩展为大合一扩展,以后使用vue3构建的组件都将合并在一起 演示地址 demo: http://dcat.weiwait.cn (admin:admin) 依赖扩展 freyo/flysystem-qcloud-cos-v5 overtrue/larave

null 7 Dec 3, 2022
LaraAdmin is a Open source Laravel Admin Panel / CMS which can be used as Admin Backend, Data Management Tool or CRM boilerplate for Laravel with features like Advanced CRUD Generation, Module Manager, Backups and many more.

LaraAdmin 1.0 LaraAdmin is a Open source CRM for quick-start Admin based applications with features like Advanced CRUD Generation, Schema Manager and

Dwij IT Solutions 1.5k Dec 29, 2022
Until 2018, Backpack v3 used this Base package to offer admin authentication and a blank admin panel using AdminLTE. Backpack v4 no longer uses this package, they're now built-in - use Backpack/CRUD instead.

Note: This package is only used by Backpack v3. Starting with Backpack v4, everything this package does is included in Backpack/CRUD - one package to

Backpack for Laravel 845 Nov 29, 2022
Littlelink admin is an admin panel for littlelink that provides you a website similar linktree.

⚙️ LittleLink Admin LittleLink Admin is an admin panel for littlelink that provides you a website similar linktree. ?? Features creating a link page w

Khashayar Zavosh 70 Oct 29, 2022
Littlelink admin is an admin panel for littlelink that provides you a website similar linktree.

LittleLink Admin is an admin panel for littlelink that provides you a website similar linktree.

Khashayar Zavosh 70 Oct 29, 2022
Admin Columns allows you to manage and organize columns in the posts, users, comments, and media lists tables in the WordPress admin panel.

Admin Columns allows you to manage and organize columns in the posts, users, comments, and media lists tables in the WordPress admin panel. Transform the WordPress admin screens into beautiful, clear overviews.

Codepress 67 Dec 14, 2022
Backpack v3 used this Base package to offer admin authentication and a blank admin panel using AdminLTE

Until 2018, Backpack v3 used this Base package to offer admin authentication and a blank admin panel using AdminLTE. Backpack v4 no longer uses this package, they're now built-in - use Backpack/CRUD instead.

Backpack for Laravel 845 Nov 29, 2022
Admin One is simple, beautiful and free Laravel admin dashboard (built with Vue.js, Bulma & Buefy).

Admin One — Free Laravel Vue Bulma Dashboard Admin One is simple, beautiful and free Laravel admin dashboard (built with Vue.js, Bulma & Buefy). Built

Viktor Kuzhelny 136 Dec 27, 2022
This is a skeleton to quickly set up a new Slim 4 application.

Slim 4 Skeleton This is a skeleton to quickly set up a new Slim 4 application. Requirements PHP 7.4+ or 8.0+ MySQL 5.7+ or MariaDB Recommended Apache

Daniel Opitz 376 Jan 2, 2023
A prototype generator to quickly generate prototypes based on Neos nodetype definitions.

UpAssist.PrototypeGenerator What does this package do? This package lets you create scaffolding for prototypes for Neos using the commandline. Why did

UpAssist 6 Nov 8, 2021
Use this skeleton application to quickly setup and start working on a new Slim Framework 4 application

Slim Framework 4 Skeleton Application Use this skeleton application to quickly setup and start working on a new Slim Framework 4 application. This app

Slim Framework 1.5k Dec 25, 2022
Wave - The Software as a Service Starter Kit, designed to help you build the SAAS of your dreams 🚀 💰

Introduction Wave is a Software as a Service Starter Kit that can help you build your next great idea ?? . Wave is built with Laravel, Voyager, Tailwi

null 4.2k Jan 4, 2023
A skeleton for build your Kata with Docker

A skeleton for build your Kata with Docker

Raúl Coloma Bonifacio 1 Nov 12, 2021
A package for building Admin-Interfaces that help maintaining the data of your applications

A package for building Admin-Interfaces that help maintaining the data of your applications. It provides an intuitive interface and the tools needed to manage your project's Users, Models and free Forms for Pages, Settings etc.

null 808 Dec 31, 2022
A Laravel admin panel which is creating CRUD for your application automatically.

Adds a zero configuration Admin Panel to your Laravel Application Installation You can install the package via composer: composer require max-hutschen

42coders 10 Aug 24, 2022
App & Models Settings for Laravel

App & Models Settings for Laravel This package allows you to store application wide and model specific Laravel settings. Settings values are type-cast

Mohammed Isa 42 Aug 12, 2022
Identify app models with a URI. Inspired by the globalid gem.

Identify app models with a URI. Heavily inspired by the globalid gem. Global ID - Reference models by URI A Global ID is an app wide URI that uniquely

Tony Messias 31 Nov 18, 2022