Repository files navigation

API Builder for Laravel

Latest Version on PackagistBuild StatusQuality ScoreTotal Downloads

API builder for Laravel aims to provide a quick and standard way of creating APIs. When you create an API for your resource using this package, you will get the standard CRUD endpoints and is flexible enough to adapt to the needs of your business logic.

Installation

You can install the package via composer:

composer require coreproc/api-builder

Usage

To start using API builder, simply create a controller, have it extend the ApiBuilderController class, then define the necessary information regarding the resource. Here is what a basic controller should look like:

<?phpnamespaceApp\Http\Controllers\Api;
useApp\Models\Post;
useApp\Transformers\PostTransformer;
useCoreProc\ApiBuilder\Http\Controllers\ApiBuilderController;
class PostsController extends ApiBuilderController
{
publicstatic$model = Post::class;
publicstatic$transformer = PostTransformer::class;
protected$allowedParams = [
'user_id',
'title',
'short_description',
'content',
'published_at',
];
}

This controller assumes that you have a Post model and a PostTransformer transformer. If you don't know about transformers, you can find more information here.

Now, to make the above controller accessible, all we need to do is define the route in routes/api.php.

Route::apiResource('posts', 'Api\PostsController');

Once defined in your routes, you will now get the following endpoints:

GET /api/posts Get a paginated list of the posts in your database
POST /api/posts Create a new Post entry
GET /api/posts/{id} Get the details of the specified Post resource
PUT /api/posts/{id} Update the Post resource
DEL /api/posts/{id} Delete the Post resource

Querying / Filtering

One of the main points of this package is to have a querying/filtering feature capable enough so that API consumers can have complete control over what they are looking for.

Inspired by GraphQL, the same way of adding operands to the parameters have been applied.

For example, if you want to query for all the Posts from a particular user ID, you would do this:

GET /api/posts?user_id=1

But if you wanted to query for all Posts where the user ID is greater than 5 (for example), you would do it like this:

GET /api/posts?user_id_gt=5

The same would be applied for all the parameters defined in your $allowedParams variable of your controller. You are required to define which parameters are allowed to be passed through the query if you want to use this feature.

Here is another example. If you would like to get Posts where the title contains the word "test", here is how you would do it:

GET /api/posts?title_contains=test

Here is the complete list of operands that you can use:

not Not equal
lt Less than
lte Less than or equal to
gt Greater than
gte Greater than or equal to
contains Uses LIKE with wildcard on both sides of the query value
not_contains Inverse of contains
starts_with Uses LIKE with wildcard at the end of the query value
not_starts_with Inverse of starts_with
ends_with Uses LIKE with wildcard at the beginning of the query value
not_ends_with Inverse of ends_with
in Where IN given a set of values. This must be passed as an array.
not_in Where NOT IN given a set of values. This must be pased as an array.

Now if you wanted to modify / apply a filter when indexing the resource by default, you can do so by overriding the indexQuery() method in your controller:

class PostsController extends ApiBuilderController {
...
protectedstaticfunctionindexQuery(Request$request, Builder$query)
{
return$query->where('user_id', $request->user()->id);
}

By doing the above, indexing the resource will only yeild results that have the user ID of the currently logged in user. You can do additional logic here as well.

Dates

Querying / Filtering of dates are also allowed and operands can be used as well. However, you will have to define the fields which are dates:

class PostsController extends ApiBuilderController {
...
protected$dates = [
'published_at',
];

Once that is defined, you can pass any value that Carbon::parse() can parse. For example:

GET /api/posts?published_at_gte=Mar1

Sorting

Sorting is also possible when going through the index of your resource. Here is an example:

GET /api/posts?sort=published_at

This will sort all Posts by their published date in ascending order. To change the direction of the order, pass the desc value along like so:

GET /api/posts?sort=published_at,desc

Please note that this package will be reserving the sort keyword for its sorting feature. (Roadmap: make this configurable)

Null values

To pass null values, this package reserves the null value to the query values. Everything that is passed with the null string will be converted into a NULL value in the backend. Here is an example on how to use it:

GET /api/posts?published_at_not=null

Limiting results

You can also limit your results by passing the limit parameter:

GET /api/posts?limit=1

Pagination

By default the index of the resource returns a paginated result. The default number of results per page is 15. (Roadmap: make this configurable)

To increase the number of results per page, you can pass the per_page parameter:

GET /api/posts?per_page=100

Pages can be navigated by defining the page number:

GET /api/posts?page=2

Creating a resource

// TODO

Creation Rules

// TODO

Viewing a resource

// TODO

Updating a resource

// TODO

Update rules

// TODO

Deleting a resource

// TODO

Authorization

// TODO

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email chris.bautista@coreproc.ph instead of using the issue tracker.

About CoreProc

CoreProc is a software development company that provides software development services to startups, digital/ad agencies, and enterprises.

Learn more about us on our website.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

API Builder for Laravel

Latest Version on PackagistBuild StatusQuality ScoreTotal Downloads

API builder for Laravel aims to provide a quick and standard way of creating APIs. When you create an API for your resource using this package, you will get the standard CRUD endpoints and is flexible enough to adapt to the needs of your business logic.

Installation

You can install the package via composer:

composer require coreproc/api-builder

Usage

To start using API builder, simply create a controller, have it extend the ApiBuilderController class, then define the necessary information regarding the resource. Here is what a basic controller should look like:

<?phpnamespaceApp\Http\Controllers\Api;
useApp\Models\Post;
useApp\Transformers\PostTransformer;
useCoreProc\ApiBuilder\Http\Controllers\ApiBuilderController;
class PostsController extends ApiBuilderController
{
publicstatic$model = Post::class;
publicstatic$transformer = PostTransformer::class;
protected$allowedParams = [
'user_id',
'title',
'short_description',
'content',
'published_at',
];
}

This controller assumes that you have a Post model and a PostTransformer transformer. If you don't know about transformers, you can find more information here.

Now, to make the above controller accessible, all we need to do is define the route in routes/api.php.

Route::apiResource('posts', 'Api\PostsController');

Once defined in your routes, you will now get the following endpoints:

GET /api/posts Get a paginated list of the posts in your database
POST /api/posts Create a new Post entry
GET /api/posts/{id} Get the details of the specified Post resource
PUT /api/posts/{id} Update the Post resource
DEL /api/posts/{id} Delete the Post resource

Querying / Filtering

One of the main points of this package is to have a querying/filtering feature capable enough so that API consumers can have complete control over what they are looking for.

Inspired by GraphQL, the same way of adding operands to the parameters have been applied.

For example, if you want to query for all the Posts from a particular user ID, you would do this:

GET /api/posts?user_id=1

But if you wanted to query for all Posts where the user ID is greater than 5 (for example), you would do it like this:

GET /api/posts?user_id_gt=5

The same would be applied for all the parameters defined in your $allowedParams variable of your controller. You are required to define which parameters are allowed to be passed through the query if you want to use this feature.

Here is another example. If you would like to get Posts where the title contains the word "test", here is how you would do it:

GET /api/posts?title_contains=test

Here is the complete list of operands that you can use:

not Not equal
lt Less than
lte Less than or equal to
gt Greater than
gte Greater than or equal to
contains Uses LIKE with wildcard on both sides of the query value
not_contains Inverse of contains
starts_with Uses LIKE with wildcard at the end of the query value
not_starts_with Inverse of starts_with
ends_with Uses LIKE with wildcard at the beginning of the query value
not_ends_with Inverse of ends_with
in Where IN given a set of values. This must be passed as an array.
not_in Where NOT IN given a set of values. This must be pased as an array.

Now if you wanted to modify / apply a filter when indexing the resource by default, you can do so by overriding the indexQuery() method in your controller:

class PostsController extends ApiBuilderController {
...
protectedstaticfunctionindexQuery(Request$request, Builder$query)
{
return$query->where('user_id', $request->user()->id);
}

By doing the above, indexing the resource will only yeild results that have the user ID of the currently logged in user. You can do additional logic here as well.

Dates

Querying / Filtering of dates are also allowed and operands can be used as well. However, you will have to define the fields which are dates:

class PostsController extends ApiBuilderController {
...
protected$dates = [
'published_at',
];

Once that is defined, you can pass any value that Carbon::parse() can parse. For example:

GET /api/posts?published_at_gte=Mar1

Sorting

Sorting is also possible when going through the index of your resource. Here is an example:

GET /api/posts?sort=published_at

This will sort all Posts by their published date in ascending order. To change the direction of the order, pass the desc value along like so:

GET /api/posts?sort=published_at,desc

Please note that this package will be reserving the sort keyword for its sorting feature. (Roadmap: make this configurable)

Null values

To pass null values, this package reserves the null value to the query values. Everything that is passed with the null string will be converted into a NULL value in the backend. Here is an example on how to use it:

GET /api/posts?published_at_not=null

Limiting results

You can also limit your results by passing the limit parameter:

GET /api/posts?limit=1

Pagination

By default the index of the resource returns a paginated result. The default number of results per page is 15. (Roadmap: make this configurable)

To increase the number of results per page, you can pass the per_page parameter:

GET /api/posts?per_page=100

Pages can be navigated by defining the page number:

GET /api/posts?page=2

Creating a resource

// TODO

Creation Rules

// TODO

Viewing a resource

// TODO

Updating a resource

// TODO

Update rules

// TODO

Deleting a resource

// TODO

Authorization

// TODO

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email chris.bautista@coreproc.ph instead of using the issue tracker.

About CoreProc

CoreProc is a software development company that provides software development services to startups, digital/ad agencies, and enterprises.

Learn more about us on our website.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

API Builder for Laravel

Latest Version on PackagistBuild StatusQuality ScoreTotal Downloads

API builder for Laravel aims to provide a quick and standard way of creating APIs. When you create an API for your resource using this package, you will get the standard CRUD endpoints and is flexible enough to adapt to the needs of your business logic.

Installation

You can install the package via composer:

composer require coreproc/api-builder

Usage

To start using API builder, simply create a controller, have it extend the ApiBuilderController class, then define the necessary information regarding the resource. Here is what a basic controller should look like:

<?phpnamespaceApp\Http\Controllers\Api;
useApp\Models\Post;
useApp\Transformers\PostTransformer;
useCoreProc\ApiBuilder\Http\Controllers\ApiBuilderController;
class PostsController extends ApiBuilderController
{
publicstatic$model = Post::class;
publicstatic$transformer = PostTransformer::class;
protected$allowedParams = [
'user_id',
'title',
'short_description',
'content',
'published_at',
];
}

This controller assumes that you have a Post model and a PostTransformer transformer. If you don't know about transformers, you can find more information here.

Now, to make the above controller accessible, all we need to do is define the route in routes/api.php.

Route::apiResource('posts', 'Api\PostsController');

Once defined in your routes, you will now get the following endpoints:

GET /api/posts Get a paginated list of the posts in your database
POST /api/posts Create a new Post entry
GET /api/posts/{id} Get the details of the specified Post resource
PUT /api/posts/{id} Update the Post resource
DEL /api/posts/{id} Delete the Post resource

Querying / Filtering

One of the main points of this package is to have a querying/filtering feature capable enough so that API consumers can have complete control over what they are looking for.

Inspired by GraphQL, the same way of adding operands to the parameters have been applied.

For example, if you want to query for all the Posts from a particular user ID, you would do this:

GET /api/posts?user_id=1

But if you wanted to query for all Posts where the user ID is greater than 5 (for example), you would do it like this:

GET /api/posts?user_id_gt=5

The same would be applied for all the parameters defined in your $allowedParams variable of your controller. You are required to define which parameters are allowed to be passed through the query if you want to use this feature.

Here is another example. If you would like to get Posts where the title contains the word "test", here is how you would do it:

GET /api/posts?title_contains=test

Here is the complete list of operands that you can use:

not Not equal
lt Less than
lte Less than or equal to
gt Greater than
gte Greater than or equal to
contains Uses LIKE with wildcard on both sides of the query value
not_contains Inverse of contains
starts_with Uses LIKE with wildcard at the end of the query value
not_starts_with Inverse of starts_with
ends_with Uses LIKE with wildcard at the beginning of the query value
not_ends_with Inverse of ends_with
in Where IN given a set of values. This must be passed as an array.
not_in Where NOT IN given a set of values. This must be pased as an array.

Now if you wanted to modify / apply a filter when indexing the resource by default, you can do so by overriding the indexQuery() method in your controller:

class PostsController extends ApiBuilderController {
...
protectedstaticfunctionindexQuery(Request$request, Builder$query)
{
return$query->where('user_id', $request->user()->id);
}

By doing the above, indexing the resource will only yeild results that have the user ID of the currently logged in user. You can do additional logic here as well.

Dates

Querying / Filtering of dates are also allowed and operands can be used as well. However, you will have to define the fields which are dates:

class PostsController extends ApiBuilderController {
...
protected$dates = [
'published_at',
];

Once that is defined, you can pass any value that Carbon::parse() can parse. For example:

GET /api/posts?published_at_gte=Mar1

Sorting

Sorting is also possible when going through the index of your resource. Here is an example:

GET /api/posts?sort=published_at

This will sort all Posts by their published date in ascending order. To change the direction of the order, pass the desc value along like so:

GET /api/posts?sort=published_at,desc

Please note that this package will be reserving the sort keyword for its sorting feature. (Roadmap: make this configurable)

Null values

To pass null values, this package reserves the null value to the query values. Everything that is passed with the null string will be converted into a NULL value in the backend. Here is an example on how to use it:

GET /api/posts?published_at_not=null

Limiting results

You can also limit your results by passing the limit parameter:

GET /api/posts?limit=1

Pagination

By default the index of the resource returns a paginated result. The default number of results per page is 15. (Roadmap: make this configurable)

To increase the number of results per page, you can pass the per_page parameter:

GET /api/posts?per_page=100

Pages can be navigated by defining the page number:

GET /api/posts?page=2

Creating a resource

// TODO

Creation Rules

// TODO

Viewing a resource

// TODO

Updating a resource

// TODO

Update rules

// TODO

Deleting a resource

// TODO

Authorization

// TODO

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email chris.bautista@coreproc.ph instead of using the issue tracker.

About CoreProc

CoreProc is a software development company that provides software development services to startups, digital/ad agencies, and enterprises.

Learn more about us on our website.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

API Builder for Laravel

Latest Version on PackagistBuild StatusQuality ScoreTotal Downloads

API builder for Laravel aims to provide a quick and standard way of creating APIs. When you create an API for your resource using this package, you will get the standard CRUD endpoints and is flexible enough to adapt to the needs of your business logic.

Installation

You can install the package via composer:

composer require coreproc/api-builder

Usage

To start using API builder, simply create a controller, have it extend the ApiBuilderController class, then define the necessary information regarding the resource. Here is what a basic controller should look like:

<?phpnamespaceApp\Http\Controllers\Api;
useApp\Models\Post;
useApp\Transformers\PostTransformer;
useCoreProc\ApiBuilder\Http\Controllers\ApiBuilderController;
class PostsController extends ApiBuilderController
{
publicstatic$model = Post::class;
publicstatic$transformer = PostTransformer::class;
protected$allowedParams = [
'user_id',
'title',
'short_description',
'content',
'published_at',
];
}

This controller assumes that you have a Post model and a PostTransformer transformer. If you don't know about transformers, you can find more information here.

Now, to make the above controller accessible, all we need to do is define the route in routes/api.php.

Route::apiResource('posts', 'Api\PostsController');

Once defined in your routes, you will now get the following endpoints:

GET /api/posts Get a paginated list of the posts in your database
POST /api/posts Create a new Post entry
GET /api/posts/{id} Get the details of the specified Post resource
PUT /api/posts/{id} Update the Post resource
DEL /api/posts/{id} Delete the Post resource

Querying / Filtering

One of the main points of this package is to have a querying/filtering feature capable enough so that API consumers can have complete control over what they are looking for.

Inspired by GraphQL, the same way of adding operands to the parameters have been applied.

For example, if you want to query for all the Posts from a particular user ID, you would do this:

GET /api/posts?user_id=1

But if you wanted to query for all Posts where the user ID is greater than 5 (for example), you would do it like this:

GET /api/posts?user_id_gt=5

The same would be applied for all the parameters defined in your $allowedParams variable of your controller. You are required to define which parameters are allowed to be passed through the query if you want to use this feature.

Here is another example. If you would like to get Posts where the title contains the word "test", here is how you would do it:

GET /api/posts?title_contains=test

Here is the complete list of operands that you can use:

not Not equal
lt Less than
lte Less than or equal to
gt Greater than
gte Greater than or equal to
contains Uses LIKE with wildcard on both sides of the query value
not_contains Inverse of contains
starts_with Uses LIKE with wildcard at the end of the query value
not_starts_with Inverse of starts_with
ends_with Uses LIKE with wildcard at the beginning of the query value
not_ends_with Inverse of ends_with
in Where IN given a set of values. This must be passed as an array.
not_in Where NOT IN given a set of values. This must be pased as an array.

Now if you wanted to modify / apply a filter when indexing the resource by default, you can do so by overriding the indexQuery() method in your controller:

class PostsController extends ApiBuilderController {
...
protectedstaticfunctionindexQuery(Request$request, Builder$query)
{
return$query->where('user_id', $request->user()->id);
}

By doing the above, indexing the resource will only yeild results that have the user ID of the currently logged in user. You can do additional logic here as well.

Dates

Querying / Filtering of dates are also allowed and operands can be used as well. However, you will have to define the fields which are dates:

class PostsController extends ApiBuilderController {
...
protected$dates = [
'published_at',
];

Once that is defined, you can pass any value that Carbon::parse() can parse. For example:

GET /api/posts?published_at_gte=Mar1

Sorting

Sorting is also possible when going through the index of your resource. Here is an example:

GET /api/posts?sort=published_at

This will sort all Posts by their published date in ascending order. To change the direction of the order, pass the desc value along like so:

GET /api/posts?sort=published_at,desc

Please note that this package will be reserving the sort keyword for its sorting feature. (Roadmap: make this configurable)

Null values

To pass null values, this package reserves the null value to the query values. Everything that is passed with the null string will be converted into a NULL value in the backend. Here is an example on how to use it:

GET /api/posts?published_at_not=null

Limiting results

You can also limit your results by passing the limit parameter:

GET /api/posts?limit=1

Pagination

By default the index of the resource returns a paginated result. The default number of results per page is 15. (Roadmap: make this configurable)

To increase the number of results per page, you can pass the per_page parameter:

GET /api/posts?per_page=100

Pages can be navigated by defining the page number:

GET /api/posts?page=2

Creating a resource

// TODO

Creation Rules

// TODO

Viewing a resource

// TODO

Updating a resource

// TODO

Update rules

// TODO

Deleting a resource

// TODO

Authorization

// TODO

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email chris.bautista@coreproc.ph instead of using the issue tracker.

About CoreProc

CoreProc is a software development company that provides software development services to startups, digital/ad agencies, and enterprises.

Learn more about us on our website.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

API Builder for Laravel

Latest Version on PackagistBuild StatusQuality ScoreTotal Downloads

API builder for Laravel aims to provide a quick and standard way of creating APIs. When you create an API for your resource using this package, you will get the standard CRUD endpoints and is flexible enough to adapt to the needs of your business logic.

Installation

You can install the package via composer:

composer require coreproc/api-builder

Usage

To start using API builder, simply create a controller, have it extend the ApiBuilderController class, then define the necessary information regarding the resource. Here is what a basic controller should look like:

<?phpnamespaceApp\Http\Controllers\Api;
useApp\Models\Post;
useApp\Transformers\PostTransformer;
useCoreProc\ApiBuilder\Http\Controllers\ApiBuilderController;
class PostsController extends ApiBuilderController
{
publicstatic$model = Post::class;
publicstatic$transformer = PostTransformer::class;
protected$allowedParams = [
'user_id',
'title',
'short_description',
'content',
'published_at',
];
}

This controller assumes that you have a Post model and a PostTransformer transformer. If you don't know about transformers, you can find more information here.

Now, to make the above controller accessible, all we need to do is define the route in routes/api.php.

Route::apiResource('posts', 'Api\PostsController');

Once defined in your routes, you will now get the following endpoints:

GET /api/posts Get a paginated list of the posts in your database
POST /api/posts Create a new Post entry
GET /api/posts/{id} Get the details of the specified Post resource
PUT /api/posts/{id} Update the Post resource
DEL /api/posts/{id} Delete the Post resource

Querying / Filtering

One of the main points of this package is to have a querying/filtering feature capable enough so that API consumers can have complete control over what they are looking for.

Inspired by GraphQL, the same way of adding operands to the parameters have been applied.

For example, if you want to query for all the Posts from a particular user ID, you would do this:

GET /api/posts?user_id=1

But if you wanted to query for all Posts where the user ID is greater than 5 (for example), you would do it like this:

GET /api/posts?user_id_gt=5

The same would be applied for all the parameters defined in your $allowedParams variable of your controller. You are required to define which parameters are allowed to be passed through the query if you want to use this feature.

Here is another example. If you would like to get Posts where the title contains the word "test", here is how you would do it:

GET /api/posts?title_contains=test

Here is the complete list of operands that you can use:

not Not equal
lt Less than
lte Less than or equal to
gt Greater than
gte Greater than or equal to
contains Uses LIKE with wildcard on both sides of the query value
not_contains Inverse of contains
starts_with Uses LIKE with wildcard at the end of the query value
not_starts_with Inverse of starts_with
ends_with Uses LIKE with wildcard at the beginning of the query value
not_ends_with Inverse of ends_with
in Where IN given a set of values. This must be passed as an array.
not_in Where NOT IN given a set of values. This must be pased as an array.

Now if you wanted to modify / apply a filter when indexing the resource by default, you can do so by overriding the indexQuery() method in your controller:

class PostsController extends ApiBuilderController {
...
protectedstaticfunctionindexQuery(Request$request, Builder$query)
{
return$query->where('user_id', $request->user()->id);
}

By doing the above, indexing the resource will only yeild results that have the user ID of the currently logged in user. You can do additional logic here as well.

Dates

Querying / Filtering of dates are also allowed and operands can be used as well. However, you will have to define the fields which are dates:

class PostsController extends ApiBuilderController {
...
protected$dates = [
'published_at',
];

Once that is defined, you can pass any value that Carbon::parse() can parse. For example:

GET /api/posts?published_at_gte=Mar1

Sorting

Sorting is also possible when going through the index of your resource. Here is an example:

GET /api/posts?sort=published_at

This will sort all Posts by their published date in ascending order. To change the direction of the order, pass the desc value along like so:

GET /api/posts?sort=published_at,desc

Please note that this package will be reserving the sort keyword for its sorting feature. (Roadmap: make this configurable)

Null values

To pass null values, this package reserves the null value to the query values. Everything that is passed with the null string will be converted into a NULL value in the backend. Here is an example on how to use it:

GET /api/posts?published_at_not=null

Limiting results

You can also limit your results by passing the limit parameter:

GET /api/posts?limit=1

Pagination

By default the index of the resource returns a paginated result. The default number of results per page is 15. (Roadmap: make this configurable)

To increase the number of results per page, you can pass the per_page parameter:

GET /api/posts?per_page=100

Pages can be navigated by defining the page number:

GET /api/posts?page=2

Creating a resource

// TODO

Creation Rules

// TODO

Viewing a resource

// TODO

Updating a resource

// TODO

Update rules

// TODO

Deleting a resource

// TODO

Authorization

// TODO

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email chris.bautista@coreproc.ph instead of using the issue tracker.

About CoreProc

CoreProc is a software development company that provides software development services to startups, digital/ad agencies, and enterprises.

Learn more about us on our website.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

API Builder for Laravel

Latest Version on PackagistBuild StatusQuality ScoreTotal Downloads

API builder for Laravel aims to provide a quick and standard way of creating APIs. When you create an API for your resource using this package, you will get the standard CRUD endpoints and is flexible enough to adapt to the needs of your business logic.

Installation

You can install the package via composer:

composer require coreproc/api-builder

Usage

To start using API builder, simply create a controller, have it extend the ApiBuilderController class, then define the necessary information regarding the resource. Here is what a basic controller should look like:

<?phpnamespaceApp\Http\Controllers\Api;
useApp\Models\Post;
useApp\Transformers\PostTransformer;
useCoreProc\ApiBuilder\Http\Controllers\ApiBuilderController;
class PostsController extends ApiBuilderController
{
publicstatic$model = Post::class;
publicstatic$transformer = PostTransformer::class;
protected$allowedParams = [
'user_id',
'title',
'short_description',
'content',
'published_at',
];
}

This controller assumes that you have a Post model and a PostTransformer transformer. If you don't know about transformers, you can find more information here.

Now, to make the above controller accessible, all we need to do is define the route in routes/api.php.

Route::apiResource('posts', 'Api\PostsController');

Once defined in your routes, you will now get the following endpoints:

GET /api/posts Get a paginated list of the posts in your database
POST /api/posts Create a new Post entry
GET /api/posts/{id} Get the details of the specified Post resource
PUT /api/posts/{id} Update the Post resource
DEL /api/posts/{id} Delete the Post resource

Querying / Filtering

One of the main points of this package is to have a querying/filtering feature capable enough so that API consumers can have complete control over what they are looking for.

Inspired by GraphQL, the same way of adding operands to the parameters have been applied.

For example, if you want to query for all the Posts from a particular user ID, you would do this:

GET /api/posts?user_id=1

But if you wanted to query for all Posts where the user ID is greater than 5 (for example), you would do it like this:

GET /api/posts?user_id_gt=5

The same would be applied for all the parameters defined in your $allowedParams variable of your controller. You are required to define which parameters are allowed to be passed through the query if you want to use this feature.

Here is another example. If you would like to get Posts where the title contains the word "test", here is how you would do it:

GET /api/posts?title_contains=test

Here is the complete list of operands that you can use:

not Not equal
lt Less than
lte Less than or equal to
gt Greater than
gte Greater than or equal to
contains Uses LIKE with wildcard on both sides of the query value
not_contains Inverse of contains
starts_with Uses LIKE with wildcard at the end of the query value
not_starts_with Inverse of starts_with
ends_with Uses LIKE with wildcard at the beginning of the query value
not_ends_with Inverse of ends_with
in Where IN given a set of values. This must be passed as an array.
not_in Where NOT IN given a set of values. This must be pased as an array.

Now if you wanted to modify / apply a filter when indexing the resource by default, you can do so by overriding the indexQuery() method in your controller:

class PostsController extends ApiBuilderController {
...
protectedstaticfunctionindexQuery(Request$request, Builder$query)
{
return$query->where('user_id', $request->user()->id);
}

By doing the above, indexing the resource will only yeild results that have the user ID of the currently logged in user. You can do additional logic here as well.

Dates

Querying / Filtering of dates are also allowed and operands can be used as well. However, you will have to define the fields which are dates:

class PostsController extends ApiBuilderController {
...
protected$dates = [
'published_at',
];

Once that is defined, you can pass any value that Carbon::parse() can parse. For example:

GET /api/posts?published_at_gte=Mar1

Sorting

Sorting is also possible when going through the index of your resource. Here is an example:

GET /api/posts?sort=published_at

This will sort all Posts by their published date in ascending order. To change the direction of the order, pass the desc value along like so:

GET /api/posts?sort=published_at,desc

Please note that this package will be reserving the sort keyword for its sorting feature. (Roadmap: make this configurable)

Null values

To pass null values, this package reserves the null value to the query values. Everything that is passed with the null string will be converted into a NULL value in the backend. Here is an example on how to use it:

GET /api/posts?published_at_not=null

Limiting results

You can also limit your results by passing the limit parameter:

GET /api/posts?limit=1

Pagination

By default the index of the resource returns a paginated result. The default number of results per page is 15. (Roadmap: make this configurable)

To increase the number of results per page, you can pass the per_page parameter:

GET /api/posts?per_page=100

Pages can be navigated by defining the page number:

GET /api/posts?page=2

Creating a resource

// TODO

Creation Rules

// TODO

Viewing a resource

// TODO

Updating a resource

// TODO

Update rules

// TODO

Deleting a resource

// TODO

Authorization

// TODO

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email chris.bautista@coreproc.ph instead of using the issue tracker.

About CoreProc

CoreProc is a software development company that provides software development services to startups, digital/ad agencies, and enterprises.

Learn more about us on our website.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

API Builder for Laravel

Latest Version on PackagistBuild StatusQuality ScoreTotal Downloads

API builder for Laravel aims to provide a quick and standard way of creating APIs. When you create an API for your resource using this package, you will get the standard CRUD endpoints and is flexible enough to adapt to the needs of your business logic.

Installation

You can install the package via composer:

composer require coreproc/api-builder

Usage

To start using API builder, simply create a controller, have it extend the ApiBuilderController class, then define the necessary information regarding the resource. Here is what a basic controller should look like:

<?phpnamespaceApp\Http\Controllers\Api;
useApp\Models\Post;
useApp\Transformers\PostTransformer;
useCoreProc\ApiBuilder\Http\Controllers\ApiBuilderController;
class PostsController extends ApiBuilderController
{
publicstatic$model = Post::class;
publicstatic$transformer = PostTransformer::class;
protected$allowedParams = [
'user_id',
'title',
'short_description',
'content',
'published_at',
];
}

This controller assumes that you have a Post model and a PostTransformer transformer. If you don't know about transformers, you can find more information here.

Now, to make the above controller accessible, all we need to do is define the route in routes/api.php.

Route::apiResource('posts', 'Api\PostsController');

Once defined in your routes, you will now get the following endpoints:

GET /api/posts Get a paginated list of the posts in your database
POST /api/posts Create a new Post entry
GET /api/posts/{id} Get the details of the specified Post resource
PUT /api/posts/{id} Update the Post resource
DEL /api/posts/{id} Delete the Post resource

Querying / Filtering

One of the main points of this package is to have a querying/filtering feature capable enough so that API consumers can have complete control over what they are looking for.

Inspired by GraphQL, the same way of adding operands to the parameters have been applied.

For example, if you want to query for all the Posts from a particular user ID, you would do this:

GET /api/posts?user_id=1

But if you wanted to query for all Posts where the user ID is greater than 5 (for example), you would do it like this:

GET /api/posts?user_id_gt=5

The same would be applied for all the parameters defined in your $allowedParams variable of your controller. You are required to define which parameters are allowed to be passed through the query if you want to use this feature.

Here is another example. If you would like to get Posts where the title contains the word "test", here is how you would do it:

GET /api/posts?title_contains=test

Here is the complete list of operands that you can use:

not Not equal
lt Less than
lte Less than or equal to
gt Greater than
gte Greater than or equal to
contains Uses LIKE with wildcard on both sides of the query value
not_contains Inverse of contains
starts_with Uses LIKE with wildcard at the end of the query value
not_starts_with Inverse of starts_with
ends_with Uses LIKE with wildcard at the beginning of the query value
not_ends_with Inverse of ends_with
in Where IN given a set of values. This must be passed as an array.
not_in Where NOT IN given a set of values. This must be pased as an array.

Now if you wanted to modify / apply a filter when indexing the resource by default, you can do so by overriding the indexQuery() method in your controller:

class PostsController extends ApiBuilderController {
...
protectedstaticfunctionindexQuery(Request$request, Builder$query)
{
return$query->where('user_id', $request->user()->id);
}

By doing the above, indexing the resource will only yeild results that have the user ID of the currently logged in user. You can do additional logic here as well.

Dates

Querying / Filtering of dates are also allowed and operands can be used as well. However, you will have to define the fields which are dates:

class PostsController extends ApiBuilderController {
...
protected$dates = [
'published_at',
];

Once that is defined, you can pass any value that Carbon::parse() can parse. For example:

GET /api/posts?published_at_gte=Mar1

Sorting

Sorting is also possible when going through the index of your resource. Here is an example:

GET /api/posts?sort=published_at

This will sort all Posts by their published date in ascending order. To change the direction of the order, pass the desc value along like so:

GET /api/posts?sort=published_at,desc

Please note that this package will be reserving the sort keyword for its sorting feature. (Roadmap: make this configurable)

Null values

To pass null values, this package reserves the null value to the query values. Everything that is passed with the null string will be converted into a NULL value in the backend. Here is an example on how to use it:

GET /api/posts?published_at_not=null

Limiting results

You can also limit your results by passing the limit parameter:

GET /api/posts?limit=1

Pagination

By default the index of the resource returns a paginated result. The default number of results per page is 15. (Roadmap: make this configurable)

To increase the number of results per page, you can pass the per_page parameter:

GET /api/posts?per_page=100

Pages can be navigated by defining the page number:

GET /api/posts?page=2

Creating a resource

// TODO

Creation Rules

// TODO

Viewing a resource

// TODO

Updating a resource

// TODO

Update rules

// TODO

Deleting a resource

// TODO

Authorization

// TODO

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email chris.bautista@coreproc.ph instead of using the issue tracker.

About CoreProc

CoreProc is a software development company that provides software development services to startups, digital/ad agencies, and enterprises.

Learn more about us on our website.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

API Builder for Laravel

Latest Version on PackagistBuild StatusQuality ScoreTotal Downloads

API builder for Laravel aims to provide a quick and standard way of creating APIs. When you create an API for your resource using this package, you will get the standard CRUD endpoints and is flexible enough to adapt to the needs of your business logic.

Installation

You can install the package via composer:

composer require coreproc/api-builder

Usage

To start using API builder, simply create a controller, have it extend the ApiBuilderController class, then define the necessary information regarding the resource. Here is what a basic controller should look like:

<?phpnamespaceApp\Http\Controllers\Api;
useApp\Models\Post;
useApp\Transformers\PostTransformer;
useCoreProc\ApiBuilder\Http\Controllers\ApiBuilderController;
class PostsController extends ApiBuilderController
{
publicstatic$model = Post::class;
publicstatic$transformer = PostTransformer::class;
protected$allowedParams = [
'user_id',
'title',
'short_description',
'content',
'published_at',
];
}

This controller assumes that you have a Post model and a PostTransformer transformer. If you don't know about transformers, you can find more information here.

Now, to make the above controller accessible, all we need to do is define the route in routes/api.php.

Route::apiResource('posts', 'Api\PostsController');

Once defined in your routes, you will now get the following endpoints:

GET /api/posts Get a paginated list of the posts in your database
POST /api/posts Create a new Post entry
GET /api/posts/{id} Get the details of the specified Post resource
PUT /api/posts/{id} Update the Post resource
DEL /api/posts/{id} Delete the Post resource

Querying / Filtering

One of the main points of this package is to have a querying/filtering feature capable enough so that API consumers can have complete control over what they are looking for.

Inspired by GraphQL, the same way of adding operands to the parameters have been applied.

For example, if you want to query for all the Posts from a particular user ID, you would do this:

GET /api/posts?user_id=1

But if you wanted to query for all Posts where the user ID is greater than 5 (for example), you would do it like this:

GET /api/posts?user_id_gt=5

The same would be applied for all the parameters defined in your $allowedParams variable of your controller. You are required to define which parameters are allowed to be passed through the query if you want to use this feature.

Here is another example. If you would like to get Posts where the title contains the word "test", here is how you would do it:

GET /api/posts?title_contains=test

Here is the complete list of operands that you can use:

not Not equal
lt Less than
lte Less than or equal to
gt Greater than
gte Greater than or equal to
contains Uses LIKE with wildcard on both sides of the query value
not_contains Inverse of contains
starts_with Uses LIKE with wildcard at the end of the query value
not_starts_with Inverse of starts_with
ends_with Uses LIKE with wildcard at the beginning of the query value
not_ends_with Inverse of ends_with
in Where IN given a set of values. This must be passed as an array.
not_in Where NOT IN given a set of values. This must be pased as an array.

Now if you wanted to modify / apply a filter when indexing the resource by default, you can do so by overriding the indexQuery() method in your controller:

class PostsController extends ApiBuilderController {
...
protectedstaticfunctionindexQuery(Request$request, Builder$query)
{
return$query->where('user_id', $request->user()->id);
}

By doing the above, indexing the resource will only yeild results that have the user ID of the currently logged in user. You can do additional logic here as well.

Dates

Querying / Filtering of dates are also allowed and operands can be used as well. However, you will have to define the fields which are dates:

class PostsController extends ApiBuilderController {
...
protected$dates = [
'published_at',
];

Once that is defined, you can pass any value that Carbon::parse() can parse. For example:

GET /api/posts?published_at_gte=Mar1

Sorting

Sorting is also possible when going through the index of your resource. Here is an example:

GET /api/posts?sort=published_at

This will sort all Posts by their published date in ascending order. To change the direction of the order, pass the desc value along like so:

GET /api/posts?sort=published_at,desc

Please note that this package will be reserving the sort keyword for its sorting feature. (Roadmap: make this configurable)

Null values

To pass null values, this package reserves the null value to the query values. Everything that is passed with the null string will be converted into a NULL value in the backend. Here is an example on how to use it:

GET /api/posts?published_at_not=null

Limiting results

You can also limit your results by passing the limit parameter:

GET /api/posts?limit=1

Pagination

By default the index of the resource returns a paginated result. The default number of results per page is 15. (Roadmap: make this configurable)

To increase the number of results per page, you can pass the per_page parameter:

GET /api/posts?per_page=100

Pages can be navigated by defining the page number:

GET /api/posts?page=2

Creating a resource

// TODO

Creation Rules

// TODO

Viewing a resource

// TODO

Updating a resource

// TODO

Update rules

// TODO

Deleting a resource

// TODO

Authorization

// TODO

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email chris.bautista@coreproc.ph instead of using the issue tracker.

About CoreProc

CoreProc is a software development company that provides software development services to startups, digital/ad agencies, and enterprises.

Learn more about us on our website.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages