ashimbadrie/lara-core

There is no license information available for the latest version (dev-main) of this package.

Contains base classes as well as helper classes to fast track development.

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

pkg:composer/ashimbadrie/lara-core

dev-main 2021-10-14 01:57 UTC

This package is auto-updated.

Last update: 2025-12-14 11:18:37 UTC


README

Quickly and easily create CRUD for Laravel API using these handy base classes.

Installation

composer require ashimbadrie/lara-core

Pre-Requisites

This package expects your database migrations to include the following required fields. By default, we turned off laravel's timestamp usage and opt-in for our custom create/update UNIX timestamp. We also added the ability to log who created/updated a record once authenticated.

$table->integer('created_by')->nullable()->comment('User who created the record');
$table->integer('created_on')->nullable()->comment('The date of creation in unix timestamp');
$table->integer('modified_by')->nullable()->comment('User who modified the record');
$table->integer('modified_on')->nullable()->comment('The date of modification in unix timestamp');

Creating a Data Model

A data model is the entrypoint to creating records in a database table. When a record is saved, the model tracks which authenticated user creates/modifies a record and also tracks the UNIX timestamp for these operations.

Creating a data model is as simple as follows:

class ExampleModel extends BaseModel {

  protected $table = 'example_table';
  
  protected function defaultLookupField(): String
  {
      return '';
  }
  
}

REST API CRUD

To handle basic REST API CRUD operations, we need to create a data manager and data controller as follows:

class ExampleManager extends DataManager {

  public function __construct()
  {
      $model = "App\Models\ExampleModel"; // Path to the ExampleModel we created above
      parent::__construct($model);
  }
  
}

class ExampleController extends DataController {

  private $exampleManager;

  public function __construct()
  {
      $this->exampleManager = new ExampleManager();
      parent::__construct($this->exampleManager);
  }
  
}

Once we have our data model, data controller and data manager set up we can now create our API resources to point to the CRUD logic. Inside the routes/api.php file, we add the following:

Route::get('examples/{id}', 'ExampleController@show');
Route::post('examples', 'ExampleController@store');
Route::patch('examples/{id}', 'ExampleController@update');
Route::delete('examples/{id}', 'ExampleController@destroy');

Paginated Record Listing

In order to load a paginated list of records, we need to create a list manager and list controller as follows:

class ExampleListManager extends DataListManager
{
    public function __construct()
    {
        $model = "App\Models\Example";
        parent::__construct($model);
    }
}

class ExampleListController extends DataListController
{
    private $exampleListManager; 
    
    public function __construct()
    {
        $this->exampleListManager = new ExampleListManager();
        parent::__construct($this->exampleListManager);
    }
}

Once we have our data list controller and data list manager we can now create our API resources to point to the listing logic. Inside the routes/api.php file, we add the following:

Route::post('examples/list', 'ExampleListController@page');
Route::get('examples/list', 'ExampleListController@index');

The listing post request accepts an application/json payload to load the first page as follows:

{
  "start": 0,
  "limit": 10,
  "sort_by": {},
  "filter_by": {}
}

NOTE: Your frontend will need to increment the start value in the payload above to cycle through a paginated list.

A typical response looks as follows:

{
  "page": [],
  "total": 0
}

Add filters to listing

TODO

Sort listing

TODO