Updates for addon/modules to make it easier to create APIs
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
"league/iso3166": "2.1.x",
|
"league/iso3166": "2.1.x",
|
||||||
"google/apiclient": "2.2.x",
|
"google/apiclient": "2.2.x",
|
||||||
"theiconic/php-ga-measurement-protocol": "2.7.x",
|
"theiconic/php-ga-measurement-protocol": "2.7.x",
|
||||||
|
"joshbrw/laravel-module-installer": "0.1.x",
|
||||||
"irazasyed/laravel-gamp": "1.3.x",
|
"irazasyed/laravel-gamp": "1.3.x",
|
||||||
"vierbergenlars/php-semver": "3.0.x"
|
"vierbergenlars/php-semver": "3.0.x"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,27 +1,29 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
'namespace' => 'Modules',
|
'namespace' => 'Modules',
|
||||||
|
|
||||||
'stubs' => [
|
'stubs' => [
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'path' => resource_path() . '/stubs/modules',
|
'path' => resource_path() . '/stubs/modules',
|
||||||
'files' => [
|
'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',
|
'event-service-provider' => 'Providers/EventServiceProvider.php',
|
||||||
'views/index' => 'Resources/views/index.blade.php',
|
'views/index' => 'Resources/views/index.blade.php',
|
||||||
'views/index-admin' => 'Resources/views/admin/index.blade.php',
|
'views/index-admin' => 'Resources/views/admin/index.blade.php',
|
||||||
'views/frontend' => 'Resources/views/layouts/frontend.blade.php',
|
'views/frontend' => 'Resources/views/layouts/frontend.blade.php',
|
||||||
'views/admin' => 'Resources/views/layouts/admin.blade.php',
|
'views/admin' => 'Resources/views/layouts/admin.blade.php',
|
||||||
'listener-test' => 'Listeners/TestEventListener.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',
|
'scaffold/config' => 'Config/config.php',
|
||||||
'composer' => 'composer.json',
|
'composer' => 'composer.json',
|
||||||
],
|
],
|
||||||
'replacements' => [
|
'replacements' => [
|
||||||
'start' => ['LOWER_NAME', 'ROUTES_LOCATION'],
|
'start' => ['LOWER_NAME', 'ROUTES_LOCATION'],
|
||||||
'routes' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
'routes' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
||||||
|
'routes-api' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
||||||
'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
||||||
'event-service-provider' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
'event-service-provider' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
||||||
'listener-test' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
'listener-test' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
|
||||||
@@ -30,6 +32,7 @@ return [
|
|||||||
'views/frontend' => ['STUDLY_NAME'],
|
'views/frontend' => ['STUDLY_NAME'],
|
||||||
'views/admin' => ['STUDLY_NAME'],
|
'views/admin' => ['STUDLY_NAME'],
|
||||||
'controller-admin' => ['MODULE_NAMESPACE', 'STUDLY_NAME', 'CLASS_NAMESPACE', 'LOWER_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'],
|
'scaffold/config' => ['STUDLY_NAME'],
|
||||||
'composer' => [
|
'composer' => [
|
||||||
'LOWER_NAME',
|
'LOWER_NAME',
|
||||||
@@ -54,8 +57,11 @@ return [
|
|||||||
'factory' => ['path' => 'Database/factories', 'generate' => true],
|
'factory' => ['path' => 'Database/factories', 'generate' => true],
|
||||||
'model' => ['path' => 'Models', 'generate' => true],
|
'model' => ['path' => 'Models', 'generate' => true],
|
||||||
'controller' => ['path' => 'Http/Controllers', '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],
|
'filter' => ['path' => 'Http/Middleware', 'generate' => true],
|
||||||
'request' => ['path' => 'Http/Requests', 'generate' => true],
|
'request' => ['path' => 'Http/Requests', 'generate' => true],
|
||||||
|
'routes' => ['path' => 'Http/Routes', 'generate' => true],
|
||||||
'provider' => ['path' => 'Providers', 'generate' => true],
|
'provider' => ['path' => 'Providers', 'generate' => true],
|
||||||
'assets' => ['path' => 'Resources/assets', 'generate' => true],
|
'assets' => ['path' => 'Resources/assets', 'generate' => true],
|
||||||
'lang' => ['path' => 'Resources/lang', 'generate' => true],
|
'lang' => ['path' => 'Resources/lang', 'generate' => true],
|
||||||
|
|||||||
31
modules/Sample/Http/Controllers/Api/SampleController.php
Normal file
31
modules/Sample/Http/Controllers/Api/SampleController.php
Normal 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,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
7
modules/Sample/Http/Routes/admin.php
Normal file
7
modules/Sample/Http/Routes/admin.php
Normal 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');
|
||||||
|
});
|
||||||
17
modules/Sample/Http/Routes/api.php
Normal file
17
modules/Sample/Http/Routes/api.php
Normal 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');
|
||||||
|
});
|
||||||
9
modules/Sample/Http/Routes/web.php
Normal file
9
modules/Sample/Http/Routes/web.php
Normal 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');
|
||||||
|
});
|
||||||
@@ -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');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
11
modules/Sample/Models/SampleTable.php
Normal file
11
modules/Sample/Models/SampleTable.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Sample\Models;
|
||||||
|
|
||||||
|
use App\Models\BaseModel;
|
||||||
|
|
||||||
|
class SampleTable extends BaseModel
|
||||||
|
{
|
||||||
|
public $table = '';
|
||||||
|
protected $fillable = [];
|
||||||
|
}
|
||||||
@@ -55,6 +55,9 @@ class SampleServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
protected function registerRoutes()
|
protected function registerRoutes()
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Routes for the frontend
|
||||||
|
*/
|
||||||
Route::group([
|
Route::group([
|
||||||
'as' => 'sample.',
|
'as' => 'sample.',
|
||||||
'prefix' => 'sample',
|
'prefix' => 'sample',
|
||||||
@@ -62,7 +65,33 @@ class SampleServiceProvider extends ServiceProvider
|
|||||||
'middleware' => ['web'],
|
'middleware' => ['web'],
|
||||||
'namespace' => 'Modules\Sample\Http\Controllers'
|
'namespace' => 'Modules\Sample\Http\Controllers'
|
||||||
], function() {
|
], 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');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "nabeel/sample",
|
"name": "/sample-module",
|
||||||
"type": "laravel-module",
|
"type": "laravel-module",
|
||||||
"license": "MIT",
|
|
||||||
"description": "",
|
"description": "",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Nabeel Shahzad",
|
"name": "",
|
||||||
"email": "gm@nabs.io"
|
"email": ""
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"joshbrw/laravel-module-installer": "dev-master"
|
"joshbrw/laravel-module-installer": "0.1.x"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"laravel": {
|
"laravel": {
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
{
|
{
|
||||||
"name": "$VENDOR$/$LOWER_NAME$",
|
"name": "VENDOR/$LOWER_NAME$-module",
|
||||||
|
"type": "laravel-module",
|
||||||
"description": "",
|
"description": "",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "$AUTHOR_NAME$",
|
"name": "",
|
||||||
"email": "$AUTHOR_EMAIL$"
|
"email": ""
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"require": {
|
||||||
|
"joshbrw/laravel-module-installer": "0.1.x"
|
||||||
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"laravel": {
|
"laravel": {
|
||||||
"providers": [
|
"providers": [
|
||||||
|
|||||||
31
resources/stubs/modules/controller-api.stub
Normal file
31
resources/stubs/modules/controller-api.stub
Normal 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,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
namespace $NAMESPACE$;
|
namespace $NAMESPACE$;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use App\Models\BaseModel;
|
||||||
|
|
||||||
class $CLASS$ extends Model
|
class $CLASS$ extends BaseModel
|
||||||
{
|
{
|
||||||
|
public $table = '';
|
||||||
protected $fillable = $FILLABLE$;
|
protected $fillable = $FILLABLE$;
|
||||||
}
|
}
|
||||||
|
|||||||
7
resources/stubs/modules/routes-admin.stub
Normal file
7
resources/stubs/modules/routes-admin.stub
Normal 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');
|
||||||
|
});
|
||||||
17
resources/stubs/modules/routes-api.stub
Normal file
17
resources/stubs/modules/routes-api.stub
Normal 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');
|
||||||
|
});
|
||||||
@@ -1,18 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
Route::group(['middleware' => [
|
Route::group(['middleware' => [
|
||||||
'role:admin|user' # leave blank to make this public
|
'role:user' # leave blank to make this public
|
||||||
]], function() {
|
]], function() {
|
||||||
|
|
||||||
# all your routes are prefixed with the above prefix
|
# all your routes are prefixed with the above prefix
|
||||||
# e.g. yoursite.com/sample
|
# e.g. yoursite.com/sample
|
||||||
Route::get('/', '$STUDLY_NAME$Controller@index');
|
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');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -55,6 +55,9 @@ class $CLASS$ extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
protected function registerRoutes()
|
protected function registerRoutes()
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Routes for the frontend
|
||||||
|
*/
|
||||||
Route::group([
|
Route::group([
|
||||||
'as' => '$LOWER_NAME$.',
|
'as' => '$LOWER_NAME$.',
|
||||||
'prefix' => '$LOWER_NAME$',
|
'prefix' => '$LOWER_NAME$',
|
||||||
@@ -62,7 +65,33 @@ class $CLASS$ extends ServiceProvider
|
|||||||
'middleware' => ['web'],
|
'middleware' => ['web'],
|
||||||
'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers'
|
'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers'
|
||||||
], function() {
|
], 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');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user