GithubHelp home page GithubHelp logo

laraman's Introduction

Laraman - Laravel Data Manager

Laraman is a Laravel based administration panel.

Laraman provides a quick user interface for reviewing and managing data stored in your database.

Laraman is really good at the index route, searching, filtering and pagination. It leaves the create, update and delete to the application.

Installation

Composer

Require this package with composer:

composer require christhompsontldr/laraman

Service Provider

After updating composer, add the ServiceProvider to the providers array in config/app.php

Laravel 5.x:

Christhompsontldr\Laraman\ServiceProvider::class,

Config

Copy the config/laraman.php file from the packge to your applications config directory.

Routes

Laraman utilizes the resource method in routes to build all the required routes.

In routes/web.php add"

Laraman::resource('users');

Laraman will now look for a app/Http/Controllers/Manage/UserController.php.

The namespace of the Laraman controllers can be changed in the config/laraman.php file. Manage is the default namespace.

Models

Include the Laraman trait on your model

use Christhompsontldr\Laraman\Traits\LaramanModel;

and then use it

use LaramanModel;

Laraman utilizes something we call formatters. We have included a few default formatters, but you are welcome to write your own. Review the Christhompsontldr\Laraman\Traits\LaramanModel class for examples.

Think of these as post-accessors. This allows Laraman to manipulate model data after the application's accessors have been applied.

Example of using the date formatter

public function __configure()
{
    $this->columns = [
        [
            'field' => 'created_at',
            'display' => 'Created',
            'formatter' => 'datetime',
            'options'   => [
                'format' => 'F j, Y g:ia',
            ]
        ],

Controllers

Include the Laraman trait on your controller

use Christhompsontldr\Laraman\Traits\LaramanController;

and then use it

use LaramanController;

Laraman expects your controller to have a __configure() method where a few things are configured.

public function __configure()
{
    $this->columns = [
        [
            'field' => 'id',
        ],
        [
            'field' => 'name',
        ],
        [
            'field' => 'email',
        ],
        [
            'field'   => 'organization.name',
            'display' => 'Organization',
        ],
    ];

    $this->buttons = [
        config('laraman.view.hintpath') . '::buttons.view',
    ];
}

This example will build an index route with a table with 4 columns and 1 button.

Options

Model

If the model name you want to use doesn't make the naming convention you used for your controller, it can be set with the model attribute

    public function __configure()
    {
        $this->model = \App\Mail::class;

Views

Need to load views from another path, use the viewPath attribute

    public function __configure()
    {
        $this->viewPath = config('laraman.view.hintpath') . '::mail';

Route

The route where laraman lives for this controller can be changed

    public function __configure()
    {
        $this->routePath = config('laraman.route.prefix') . '.mail';

Search

You can enable model level searches with the searchEnabled attribute

public function __configure()
{
    $this->searchEnabled = true;

Your model will need to have implemented a search() method. This is commonly found in the Laravel Scout library or the Algolia Search for Laravel library.

Columns

The only required array key for a column is the field. This will be the database column name you want to display.

display

display will change the name displayed to the user in the top of the table.

related model data

The dot notation can be used to reach related model data.

public function __configure()
{
    $this->columns = [
        [
            'field' => 'id',
        ],
        [
            'field' => 'name',
        ],
        [
            'field' => 'email',
        ],
        [
            'field'   => 'organization.name',
            'display' => 'Organization',
        ],
    ];

organization.name will load the name from the related organization.

blade

If you need to use a custom blade for a field, define it like this

public function __configure()
{
    $this->columns = [
        [
            'field' => 'braintree_customer_id',
            'display' => 'Braintree Customer',
            'options' => [
                'blade' => config('laraman.view.hintpath') . '::fields.memberships.customer'
            ]
        ],

Filters

Laraman can utilize filters defined on the model

public function __configure()
{
    $this->filters = [
        [
            'field' => 'event',
            'display' => 'Event',
            'type' => 'select',
            'values' => [
                'send'  => 'send',
                'hard_bounce' => 'hard bounce',
                'open'   => 'open',
                'soft_bounce' => 'soft bounce',
                'deferral' => 'clickdeferral',
                'delivered' => 'delivered',
                'reject' => 'reject',
                'spam' => 'spam',
            ]
        ],
    ];

If the model has a filterEvent defined, it will be utilized


    public function filterEvent($builder, $val)
    {
        return $builder->{$val}();
    }

Could be used to apply model scopes like scopeSend() and scopeOpen().

Buttons

Action buttons can be added with the buttons attribute

public function __configure()
{
    $this->buttons = [
        'laraman::buttons.braintree-transaction',
        'laraman::buttons.receipt',
    ];

Scopes

If you need to scope the model being used, define a scope method in your controller

class TrialController extends Controller
{
    use LaramanController;

    public function scope($builder)
    {
        //  only show trials
        return $builder->trial();
    }

Extras

Have extra data to pass from the controller to the view, use extras

class TrialController extends Controller
{
    use LaramanController;

    public function __configure()
    {
        $this->columns = [
            [
                'field' => 'created_at',
                'display' => 'Created',
                'formatter' => 'datetime',
                'options'   => [
                    'format' => 'F j, Y g:ia',
                ]
            ]
        ];

        //  active trials
        $this->extras['active'] = Membership::trial()->active()->count();

        //  by day
        $this->extras['byday'] = [];
        foreach (range(0, 30) as $day) {
            $date = Carbon::now()->subDays($day)->format('Y-m-d');

            $this->extras['byday'][$date] = Membership::trial()->active()->whereDate('created_at', $date)->count();
        }
    }

laraman's People

Contributors

christhompsontldr avatar jameswagoner avatar taylornotwell avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.