All Projects → novius → laravel-backpack-crud-extended

novius / laravel-backpack-crud-extended

Licence: other
This package extends Backpack/CRUD, to add some awesome features!

Programming Languages

PHP
23972 projects - #3 most used programming language
HTML
75241 projects
shell
77523 projects

Projects that are alternatives of or similar to laravel-backpack-crud-extended

ionic4-angular7-example
Ionic 4, Angular 7 and Cordova Tutorial: Build CRUD Mobile Apps
Stars: ✭ 57 (-5%)
Mutual labels:  crud
crudcast
Create and deploy a RESTful API with a few lines of YAML
Stars: ✭ 32 (-46.67%)
Mutual labels:  crud
aarbac
An Automated Role Based Access Control .NET framework with T-SQL Query Parser which automatically parse select, insert, update, delete queries based on the logged in user role
Stars: ✭ 18 (-70%)
Mutual labels:  crud
node-express-mongodb-reactjs-graphql
Node, Express, React.js, Graphql and MongoDB CRUD Web Application
Stars: ✭ 36 (-40%)
Mutual labels:  crud
sql-repository
[PHP 7] SQL Repository implementation
Stars: ✭ 37 (-38.33%)
Mutual labels:  crud
spectre-canjs
A data administration component library built on the Spectre.css framework enabled with CanJS
Stars: ✭ 25 (-58.33%)
Mutual labels:  crud
citrus
🌈 低代码快速开发脚手架,灵活、高效,降低开发成本
Stars: ✭ 368 (+513.33%)
Mutual labels:  crud
ohcrud
OhCRUD PHP framework. http://ohcrud.erfan.me/
Stars: ✭ 25 (-58.33%)
Mutual labels:  crud
vue-js-3-firebase-firestore
Vue 3 Firebase Tutorial: Build Firestore CRUD Web Application
Stars: ✭ 34 (-43.33%)
Mutual labels:  crud
remult
A CRUD framework for full stack TypeScript
Stars: ✭ 1,488 (+2380%)
Mutual labels:  crud
Processor
Ontology-driven Linked Data processor and server for SPARQL backends. Apache License.
Stars: ✭ 54 (-10%)
Mutual labels:  crud
therack
Laravel 7 e-commerce website
Stars: ✭ 77 (+28.33%)
Mutual labels:  crud
logrocket deno api
A functional CRUD-like API with Deno and Postgres
Stars: ✭ 23 (-61.67%)
Mutual labels:  crud
laravel-crudable
Laravel CRUD builder with ease
Stars: ✭ 40 (-33.33%)
Mutual labels:  crud
react-with-nodejs-and-sequelize
React-Redux application using NodeJS relational database API with Sequelize ORM. Two level CRUD with a main data table (bands) and other that is relationed with it (albums).
Stars: ✭ 30 (-50%)
Mutual labels:  crud
soda-for-java
SODA (Simple Oracle Document Access) for Java is an Oracle library for writing Java apps that work with JSON (and not only JSON!) in the Oracle Database. SODA allows your Java app to use the Oracle Database as a NoSQL document store.
Stars: ✭ 61 (+1.67%)
Mutual labels:  crud
mern-stack-crud
MERN stack (MongoDB, Express, React and Node.js) create read update and delete (CRUD) web application example
Stars: ✭ 142 (+136.67%)
Mutual labels:  crud
CRUD.ASPCore.Reactjs.WebAPI.EF
CRUD Operations in ASP.NET Core application using React.js , Web API and Entity Framework core DB first approach with the help of VS 2017.
Stars: ✭ 80 (+33.33%)
Mutual labels:  crud
varbox
THE Laravel Admin Panel package built by developers, for developers
Stars: ✭ 61 (+1.67%)
Mutual labels:  crud
api
_api is an autogenerated CRUD API built on LowDB and ExpressJS.
Stars: ✭ 73 (+21.67%)
Mutual labels:  crud

Laravel Backpack CRUD Extended

Travis Packagist Release Licence

This package extends Backpack/CRUD. See all features added bellow.

To do this without any modification on your controller or others package, this package:

  • is able to override all Backpack/CRUD views;
  • extends CrudPanel class.

Table of Contents

Installation

In your terminal:

composer require novius/laravel-backpack-crud-extended

Then, if you are on Laravel 5.4 (no need for Laravel 5.5 and higher), register the service provider to your config/app.php file:

'providers' => [
    ...
    Novius\Backpack\CRUD\CrudServiceProvider::class,
];

Publish views

If you have already published backpack-crud views, this package will not work. You have to remove views into resources/views/vendor/backpack/crud/, or to override them with:

php artisan vendor:publish --provider="Novius\Backpack\CRUD\CrudServiceProvider" --force

Configuration

Some options that you can override are available.

php artisan vendor:publish --provider="Novius\Backpack\CRUD\CrudServiceProvider" --tag="config"

Usage & Features

Permissions

Description

  • Permissions can be applied automatically to CRUD Controllers : deny access if user hasn't the permission linked to the route => apply_permissions option
  • Permissions can be automatically created for all Crud Controllers used in you application (4 permissions will be created : list, update, create, delete) => create_permissions_while_browsing option
  • Permissions can be automatically given to the logged user (useful in local environment) => give_permissions_to_current_user_while_browsing option

Requirements

php artisan permissions:generate // Insert permissions in database for each CRUD controllers.
  • Set to true each options that you want activate

Usage

Your CrudController must extend \Novius\Backpack\CRUD\Http\Controllers\CrudController

CRUD Boxes

You can now split your create/edit inputs into multiple boxes.

backpack-crud-boxes

In order to use this feature, you just need to specify the box name for each of your fields.

$this->crud->addField([
    'name' => 'title',
    'label' => "My Title",
    'type' => 'text',
    'box' => 'Box name here'
]);

You can also specify some options to each box:

$this->crud->setBoxOptions('Details', [
    'side' => true,         // Place this box on the right side?
    'class' => "box-info",  // CSS class to add to the div. Eg, <div class="box box-info">
    'collapsed' => true,    // Collapse this box by default?
]);

If you forget to specify a tab name for a field, Backpack will place it in the last box.

You can specify manually a default box in the crud file. If your field doesn't have the box attribute, this field will be displayed in this default box.

$this->crud->setDefaultBox('YourBoxName');

Fields Drivers

Fields type can now be a classname:

$this->crud->addField([
    'name' => 'username',
    'label' => "My username",
    'type' => \My\Other\Package\Field\Foo::class,
]);

This allows you to propose new field types in external packages. Your Field class must implement Field Contract.

Language / i18n

Set a custom dictionary for a specific crud:

$this->crud->setLangFile('backpack::crud/movie');

This dictionary will then be used in the CRUD views.

You can use it in your own views like this:

{{ trans($crud->getLangFile().'.add') }}

Upload Field : UploadableFile Trait

If you use Upload CRUD Field, you can implement this Trait on your Model to automatically upload / delete file(s) on server.

Example:

// Article Model

class Article extends \Backpack\NewsCRUD\app\Models\Article
{
    use Sluggable, SluggableScopeHelpers;
    use HasTranslations;
    use UploadableFile;

    protected $fillable = ['slug', 'title', 'content', 'image', 'status', 'category_id', 'featured', 'date', 'document', 'document_2'];
    protected $translatable = ['slug', 'title', 'content'];

    public function uploadableFiles(): array
    {
        return [
            ['name' => 'document'],
            ['name' => 'document_2', 'slug' => 'title']
        ];
    }
}
// ArticleCrudController

$this->crud->addField([ 
    'label' => 'Image',
    'name' => 'image',
    'type' => 'image',
    'upload' => true,
    'crop' => true, // set to true to allow cropping, false to disable
    'aspect_ratio' => 0, // ommit or set to 0 to allow any aspect ratio
    'prefix' => '/storage/',
]);

$this->crud->addField([
    'label' => 'Document',
    'name' => 'document',
    'type' => 'upload',
    'upload' => true,
    'prefix' => '/storage/',
]);

$this->crud->addField([
    'label' => 'Document 2',
    'name' => 'document_2',
    'type' => 'upload',
    'upload' => true,
    'prefix' => '/storage/',
]);

Upload Field : file_upload_crud validation rule

A validation rule exists to easily validate CRUD request with "upload" field.

Example of usage in your requests files:

public function rules()
{
    return [
        'name' => 'required|min:2|max:191',           
        'document' => 'file_upload_crud:pdf,docx', // the parameters must be valid mime types
    ];
}

public function messages()
{
    return [
        'file_upload_crud' => 'The :attribute must be a valid file.',
    ];
}

Image Field : UploadableImage Trait

If you use the Image CRUD Field, you can implement this trait on your model to automatically manage saving and deleting the image on the server.

Example:

namespace App\Models;

use Backpack\CRUD\CrudTrait;
use Illuminate\Database\Eloquent\Model;
use Novius\Backpack\CRUD\ModelTraits\UploadableImage;

class Example extends Model
{
    use CrudTrait;
    use UploadableImage;

    protected $fillable = ['title', 'image', 'thumbnail'];

    public function uploadableImages()
    {
        return [
            [
                'name' => 'image', // The attribute name where to store the image path
                'slug' => 'title', // The attribute name from which to generate the image file name (optionnal)
            ],
            [
                'name' => 'thumbnail',
            ],
        ];
    }
}

If you want to perform some custom actions on your image after saving or deleting it :

namespace App\Models;

use Backpack\CRUD\CrudTrait;
use Illuminate\Database\Eloquent\Model;
use Novius\Backpack\CRUD\ModelTraits\UploadableImage;

class Example extends Model
{
    use CrudTrait;
    use UploadableImage {
        imagePathSaved as imagePathSavedNative;
        imagePathDeleted as imagePathDeletedNative;
    }

    protected $fillable = ['title', 'image', 'thumbnail'];

    public function uploadableImages()
    {
        return [
            [
                'name' => 'image', // The attribute name where to store the image path
                'slug' => 'title', // The attribute name from which to generate the image file name (optionnal)
            ],
            [
                'name' => 'thumbnail',
            ],
        ];
    }

    /**
     * Callback triggered after image saved on disk
     */
    public function imagePathSaved(string $imagePath, string $imageAttributeName = null, string $diskName = null)
    {
        if (!$this->imagePathSavedNative()) {
            return false;
        }

        // Do what you want here

        return true;
    }

    /**
     * Callback triggered after image deleted on disk
     */
    public function imagePathDeleted(string $imagePath, string $imageAttributeName = null, string $diskName = null)
    {
        if (!$this->imagePathDeletedNative()) {
            return false;
        }
        
        // Do what you want here

        return true;
    }
}

MediaLibrary

If you want to store the images in the MediaLibrary provided by Spatie, use the trait SpatieMediaLibrary\UploadableImage instead of UploadableImage.

For example with the MediaLibrary you can easily manage conversions (crop, resize, ...).

Translations

Both traits UploadableImage and SpatieMediaLibrary\UploadableImage are compatible with the translation package provided by Spatie.

In the case of translatable images with SpatieMediaLibrary\UploadableImage, the name of the collection where the image is stored is composed of the name of the attribute and the locale, separated by a dash (eg. image-en, image-fr, ...).


CRUD : custom routes

You can set a custom value to some routes.

  • Index route : used with "back to all" button or breadcrumb's link. Available with $crud->indexRoute().
  • Reorder route : used with "Reorder button". Available with $crud->reorderRoute().

Example of usage in your CrudController :

// Set a custom index route
$this->crud->setIndexRoute('crud.slide.index', ['slideshow' => (int) request('slideshow')]);

// Set a custom reorder route
$this->crud->setReorderRoute('crud.slide.reorder', ['slideshow' => (int) request('slideshow')]);

Testing

Run the tests with:

./test.sh

Lint

Run php-cs with:

./cs.sh

Contributing

Contributions are welcome! Leave an issue on Github, or create a Pull Request.

Licence

This package is under GNU Affero General Public License v3 or (at your option) any later version.

However, this package requires Backpack\CRUD, which is under YUMMY license: if you use it in a commercial project, you have to buy a backpack license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].