Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/novius/laravel-backpack-crud-extended
This package extends Backpack/CRUD, to add some awesome features!
https://github.com/novius/laravel-backpack-crud-extended
admin backpack crud laravel php7
Last synced: 2 days ago
JSON representation
This package extends Backpack/CRUD, to add some awesome features!
- Host: GitHub
- URL: https://github.com/novius/laravel-backpack-crud-extended
- Owner: novius
- Created: 2017-08-21T15:47:00.000Z (about 7 years ago)
- Default Branch: 0.3
- Last Pushed: 2023-02-17T15:30:23.000Z (over 1 year ago)
- Last Synced: 2024-09-23T08:19:28.348Z (about 2 months ago)
- Topics: admin, backpack, crud, laravel, php7
- Language: PHP
- Homepage:
- Size: 80.1 KB
- Stars: 60
- Watchers: 10
- Forks: 15
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Laravel Backpack CRUD Extended
[![Travis](https://img.shields.io/travis/novius/laravel-backpack-crud-extended.svg?maxAge=1800&style=flat-square)](https://travis-ci.org/novius/laravel-backpack-crud-extended)
[![Packagist Release](https://img.shields.io/packagist/v/novius/laravel-backpack-crud-extended.svg?maxAge=1800&style=flat-square)](https://packagist.org/packages/novius/laravel-backpack-crud-extended)
[![Licence](https://img.shields.io/packagist/l/novius/laravel-backpack-crud-extended.svg?maxAge=1800&style=flat-square)](https://github.com/novius/laravel-backpack-crud-extended#licence)This package extends [Backpack/CRUD](https://github.com/laravel-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](#installation)
- [Publish views](#publish-views)
- [Configuration](#configuration)
- [Usage & Features](#usage--features)
- [Permissions](#permissions)
- [CRUD Boxes](#crud-boxes)
- [Fields Drivers](#fields-drivers)
- [Language / i18n](#language--i18n)
- [Upload Field : UploadableFile Trait](#upload-field--uploadablefile-trait)
- [Upload Field : file_upload_crud validation rule](#upload-field--file_upload_crud-validation-rule)
- [Image Field : UploadableImage Trait](#image-field--uploadableimage-trait)
- [CRUD : custom routes](#crud--custom-routes)
- [Testing](#testing)
- [Lint](#lint)
- [Contributing](#contributing)
- [Licence](#licence)## Installation
In your terminal:
```bash
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:
```php
'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:```sh
php artisan vendor:publish --provider="Novius\Backpack\CRUD\CrudServiceProvider" --force
```### Configuration
Some options that you can override are available.
```sh
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
- This feature require : [Laravel-Backpack/PermissionManager](https://github.com/Laravel-Backpack/PermissionManager)
- You have to publish config file :```sh
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](https://user-images.githubusercontent.com/1242207/29535541-7d14ca06-86ba-11e7-8ba6-303b2b99924b.png)
In order to use this feature, you just need to specify the box name for each of your fields.
```php
$this->crud->addField([
'name' => 'title',
'label' => "My Title",
'type' => 'text',
'box' => 'Box name here'
]);
```You can also specify some options to each box:
```php
$this->crud->setBoxOptions('Details', [
'side' => true, // Place this box on the right side?
'class' => "box-info", // CSS class to add to the div. Eg,
'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.```php
$this->crud->setDefaultBox('YourBoxName');
```### Fields Drivers
Fields type can now be a classname:
```php
$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:
```php
$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:
```php
{{ 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:
```php
// Article Modelclass 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']
];
}
}
``````php
// 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:
```php
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](https://laravel-backpack.readme.io/docs/crud-fields#section-image), you can implement this trait on your model to automatically manage saving and deleting the image on the server.
Example:
```php
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 :
```php
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 herereturn true;
}
}
```#### MediaLibrary
If you want to store the images in the [MediaLibrary](https://github.com/spatie/laravel-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](https://github.com/spatie/laravel-translatable) 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 :
```php
// 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:
```bash
./test.sh
```## Lint
Run php-cs with:
```bash
./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](http://www.gnu.org/licenses/agpl-3.0.html) or (at your option) any later version.
However, this package requires [Backpack\CRUD](http://github.com/laravel-backpack/crud), which is under YUMMY license: if you use it in a commercial project, you have to [buy a backpack license](https://backpackforlaravel.com/pricing).