earlybirdmvp / foundry
A simple but powerful CRUD tool for Laravel
Requires
- doctrine/dbal: *
- laravel/framework: >=4.2.0
This package is not auto-updated.
Last update: 2024-11-13 07:08:14 UTC
README
Easily perform CRUD tasks on Eloquent models
This is a replacement for Laravel's Resource Controllers, which are very lightweight.
Installation
Add "earlybirdmvp/foundry" to your composer.json file and run composer update
.
Then add these lines to your app/start/global.php
file:
View::addLocation(base_path().'/vendor/earlybirdmvp/foundry/views'); View::addNamespace('foundry', base_path().'/vendor/earlybirdmvp/foundry/views');
Getting Started
First create your Foundry model.
class Product extends Eloquent { use Earlybird\Foundry; }
Then create a Controller:
class ProductController extends BaseController { use Earlybird\FoundryController; }
Finally add a Route resource group. See http://laravel.com/docs/controllers#resource-controllers All of the "only", "except", etc. options can be used.
Route::resource('product', 'ProductController');
That's all!
Now you simply need to go to the URL product
and you will see a paginated list of all Product objects. There is a button to create a new product, and columns with unique indexes link to edit the individual resource.
Features
- Works well with Bootstrap classes
- This is meant to be a CMS, not a DB admin tool. Therefore the Eloquent
$hidden
and$guarded
arrays are respected and not visible or editable, respectively. - If a column name has a comment, that is shown instead (can be used to create user-friendly labels)
- Supported data types:
bigint, char, date, decimal, enum, int, text, tinyint, varchar
- Validation is built in.
NOT NULL
columns are considered "required", any column containing "email" inside its name must be a valid email address, and columns with unique indexes are checked - Validation errors are displayed next to the problematic input
- Very basic
belongsTo
relationships are supported. The column must end in_id
and must have the same prefix as the name of the relationship. For example, if theproducts
table has acategory_id
column, and this Eloquent relationship then it will work:
class Product extends Eloquent { use Earlybird\Foundry; public function category() { return $this->belongsTo('Category'); } }
- These
belongsTo
relationships are shown as select dropdowns where the value is theid
and the option text is thename
attribute. If the table does not have aname
column, or you wish to change what is displayed, you can use$appends
:
class Product extends Eloquent { use Earlybird\Foundry; protected $appends = array( 'foundry_value', ); public function getFoundryValueAttribute() { return $this->sku . ': ' . $this->name; } }
Options
Controller
- Specify the model with
protected $model
. Default is class name with "Controller" stripped off. - Set the number of items shown per page with
protected $per_page
. Default 10. - If you wish to detect updates, create a
detectChange
function. This is called beforesave()
so that you can compare the old and new values
class OrderController extends BaseController { use Earlybird\FoundryController; public function detectChange() { // Email customer update that order status was changed } }
Todo
- sort and filter the index page
- support more data types
- improve validation for dates
- improve support for relationships
- delete resources
- bulk updates and deletes
- more flexible layout