Updates for addon/modules to make it easier to create APIs

This commit is contained in:
Nabeel Shahzad
2018-02-08 19:09:36 -06:00
parent b4ea82f327
commit bcc6be0d29
18 changed files with 216 additions and 44 deletions

View File

@@ -32,6 +32,7 @@
"league/iso3166": "2.1.x",
"google/apiclient": "2.2.x",
"theiconic/php-ga-measurement-protocol": "2.7.x",
"joshbrw/laravel-module-installer": "0.1.x",
"irazasyed/laravel-gamp": "1.3.x",
"vierbergenlars/php-semver": "3.0.x"
},

View File

@@ -1,27 +1,29 @@
<?php
return [
'namespace' => 'Modules',
'stubs' => [
'enabled' => true,
'path' => resource_path() . '/stubs/modules',
'files' => [
'routes' => 'Http/routes.php',
'routes' => 'Http/Routes/web.php',
'routes-api' => 'Http/Routes/api.php',
'routes-admin' => 'Http/Routes/admin.php',
'event-service-provider' => 'Providers/EventServiceProvider.php',
'views/index' => 'Resources/views/index.blade.php',
'views/index-admin' => 'Resources/views/admin/index.blade.php',
'views/frontend' => 'Resources/views/layouts/frontend.blade.php',
'views/admin' => 'Resources/views/layouts/admin.blade.php',
'listener-test' => 'Listeners/TestEventListener.php',
'controller-admin' => 'Http/Controllers/AdminController.php',
'controller-api' => 'Http/Controllers/Api/SampleController.php',
'controller-admin' => 'Http/Controllers/Admin/AdminController.php',
'scaffold/config' => 'Config/config.php',
'composer' => 'composer.json',
],
'replacements' => [
'start' => ['LOWER_NAME', 'ROUTES_LOCATION'],
'routes' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
'routes-api' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
'event-service-provider' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
'listener-test' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
@@ -30,6 +32,7 @@ return [
'views/frontend' => ['STUDLY_NAME'],
'views/admin' => ['STUDLY_NAME'],
'controller-admin' => ['MODULE_NAMESPACE', 'STUDLY_NAME', 'CLASS_NAMESPACE', 'LOWER_NAME'],
'controller-api' => ['MODULE_NAMESPACE', 'STUDLY_NAME', 'CLASS_NAMESPACE', 'LOWER_NAME'],
'scaffold/config' => ['STUDLY_NAME'],
'composer' => [
'LOWER_NAME',
@@ -54,8 +57,11 @@ return [
'factory' => ['path' => 'Database/factories', 'generate' => true],
'model' => ['path' => 'Models', 'generate' => true],
'controller' => ['path' => 'Http/Controllers', 'generate' => true],
'controller-admin' => ['path' => 'Http/Controllers/Admin', 'generate' => true],
'controller-api' => ['path' => 'Http/Controllers/Api', 'generate' => true],
'filter' => ['path' => 'Http/Middleware', 'generate' => true],
'request' => ['path' => 'Http/Requests', 'generate' => true],
'routes' => ['path' => 'Http/Routes', 'generate' => true],
'provider' => ['path' => 'Providers', 'generate' => true],
'assets' => ['path' => 'Resources/assets', 'generate' => true],
'lang' => ['path' => 'Resources/lang', 'generate' => true],

View File

@@ -0,0 +1,31 @@
<?php
namespace Modules\Sample\Http\Controllers\Api;
use App\Http\Controllers\Api\RestController;
use Illuminate\Http\Request;
class SampleController extends RestController
{
/**
* Just send out a message
* @param Request $request
*/
public function index(Request $request)
{
return $this->message('Hello, world!');
}
/**
* @param Request $request
*/
public function hello(Request $request)
{
// Another way to return JSON, this for a custom response
// It's recommended to use Resources for responses from the database
return response()->json([
'name' => Auth::user()->name,
]);
}
}

View File

@@ -0,0 +1,7 @@
<?php
# This is the admin path. Comment this out if you don't have
# an admin panel component.
Route::group([], function () {
Route::get('/', 'AdminController@index');
});

View File

@@ -0,0 +1,17 @@
<?php
/**
* This is publicly accessible
*/
Route::group(['middleware' => []], function() {
Route::get('/', 'SampleController@index');
});
/**
* This is required to have a valid API key
*/
Route::group(['middleware' => [
'api.auth'
]], function() {
Route::get('/hello', 'SampleController@hello');
});

View File

@@ -0,0 +1,9 @@
<?php
Route::group(['middleware' => [
'role:user' # leave blank to make this public
]], function() {
# all your routes are prefixed with the above prefix
# e.g. yoursite.com/sample
Route::get('/', 'SampleController@index');
});

View File

@@ -1,18 +0,0 @@
<?php
Route::group(['middleware' => [
'role:admin|user' # leave blank to make this public
]], function() {
# all your routes are prefixed with the above prefix
# e.g. yoursite.com/sample
Route::get('/', 'SampleController@index');
# This is the admin path. Comment this out if you don't have
# an admin panel component.
Route::group([
'middleware' => ['role:admin'],
], function () {
Route::get('/admin', 'AdminController@index');
});
});

View File

@@ -0,0 +1,11 @@
<?php
namespace Modules\Sample\Models;
use App\Models\BaseModel;
class SampleTable extends BaseModel
{
public $table = '';
protected $fillable = [];
}

View File

@@ -55,6 +55,9 @@ class SampleServiceProvider extends ServiceProvider
*/
protected function registerRoutes()
{
/**
* Routes for the frontend
*/
Route::group([
'as' => 'sample.',
'prefix' => 'sample',
@@ -62,7 +65,33 @@ class SampleServiceProvider extends ServiceProvider
'middleware' => ['web'],
'namespace' => 'Modules\Sample\Http\Controllers'
], function() {
$this->loadRoutesFrom(__DIR__ . '/../Http/routes.php');
$this->loadRoutesFrom(__DIR__ . '/../Http/Routes/web.php');
});
/**
* Routes for the admin
*/
Route::group([
'as' => 'sample.',
'prefix' => 'api/sample/admin',
// If you want a RESTful module, change this to 'api'
'middleware' => ['web', 'role:admin'],
'namespace' => 'Modules\Sample\Http\Controllers\Admin'
], function() {
$this->loadRoutesFrom(__DIR__ . '/../Http/Routes/admin.php');
});
/**
* Routes for an API
*/
Route::group([
'as' => 'sample.',
'prefix' => 'api/sample',
// If you want a RESTful module, change this to 'api'
'middleware' => ['api'],
'namespace' => 'Modules\Sample\Http\Controllers\Api'
], function() {
$this->loadRoutesFrom(__DIR__ . '/../Http/Routes/api.php');
});
}

View File

@@ -1,16 +1,15 @@
{
"name": "nabeel/sample",
"name": "/sample-module",
"type": "laravel-module",
"license": "MIT",
"description": "",
"authors": [
{
"name": "Nabeel Shahzad",
"email": "gm@nabs.io"
"name": "",
"email": ""
}
],
"require": {
"joshbrw/laravel-module-installer": "dev-master"
"joshbrw/laravel-module-installer": "0.1.x"
},
"extra": {
"laravel": {

View File

@@ -1,12 +1,16 @@
{
"name": "$VENDOR$/$LOWER_NAME$",
"name": "VENDOR/$LOWER_NAME$-module",
"type": "laravel-module",
"description": "",
"authors": [
{
"name": "$AUTHOR_NAME$",
"email": "$AUTHOR_EMAIL$"
"name": "",
"email": ""
}
],
"require": {
"joshbrw/laravel-module-installer": "0.1.x"
},
"extra": {
"laravel": {
"providers": [

View File

@@ -0,0 +1,31 @@
<?php
namespace $MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers\Api;
use App\Http\Controllers\Api\RestController;
use Illuminate\Http\Request;
class SampleController extends RestController
{
/**
* Just send out a message
* @param Request $request
*/
public function index(Request $request)
{
return $this->message('Hello, world!');
}
/**
* @param Request $request
*/
public function hello(Request $request)
{
// Another way to return JSON, this for a custom response
// It's recommended to use Resources for responses from the database
return response()->json([
'name' => Auth::user()->name,
]);
}
}

View File

@@ -2,9 +2,10 @@
namespace $NAMESPACE$;
use Illuminate\Database\Eloquent\Model;
use App\Models\BaseModel;
class $CLASS$ extends Model
class $CLASS$ extends BaseModel
{
public $table = '';
protected $fillable = $FILLABLE$;
}

View File

@@ -0,0 +1,7 @@
<?php
# This is the admin path. Comment this out if you don't have
# an admin panel component.
Route::group([], function () {
Route::get('/', 'AdminController@index');
});

View File

@@ -0,0 +1,17 @@
<?php
/**
* This is publicly accessible
*/
Route::group(['middleware' => []], function() {
Route::get('/', '$STUDLY_NAME$Controller@index');
});
/**
* This is required to have a valid API key
*/
Route::group(['middleware' => [
'api.auth'
]], function() {
Route::get('/hello', '$STUDLY_NAME$Controller@hello');
});

View File

@@ -1,18 +1,9 @@
<?php
Route::group(['middleware' => [
'role:admin|user' # leave blank to make this public
'role:user' # leave blank to make this public
]], function() {
# all your routes are prefixed with the above prefix
# e.g. yoursite.com/sample
Route::get('/', '$STUDLY_NAME$Controller@index');
# This is the admin path. Comment this out if you don't have
# an admin panel component.
Route::group([
'middleware' => ['role:admin'],
], function () {
Route::get('/admin', 'AdminController@index');
});
});

View File

@@ -55,6 +55,9 @@ class $CLASS$ extends ServiceProvider
*/
protected function registerRoutes()
{
/**
* Routes for the frontend
*/
Route::group([
'as' => '$LOWER_NAME$.',
'prefix' => '$LOWER_NAME$',
@@ -62,7 +65,33 @@ class $CLASS$ extends ServiceProvider
'middleware' => ['web'],
'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers'
], function() {
$this->loadRoutesFrom(__DIR__ . '/../Http/routes.php');
$this->loadRoutesFrom(__DIR__ . '/../Http/Routes/web.php');
});
/**
* Routes for the admin
*/
Route::group([
'as' => '$LOWER_NAME$.',
'prefix' => 'api/$LOWER_NAME$/admin',
// If you want a RESTful module, change this to 'api'
'middleware' => ['web', 'role:admin'],
'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers\Admin'
], function() {
$this->loadRoutesFrom(__DIR__ . '/../Http/Routes/admin.php');
});
/**
* Routes for an API
*/
Route::group([
'as' => '$LOWER_NAME$.',
'prefix' => 'api/$LOWER_NAME$',
// If you want a RESTful module, change this to 'api'
'middleware' => ['api'],
'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers\Api'
], function() {
$this->loadRoutesFrom(__DIR__ . '/../Http/Routes/api.php');
});
}