PHP code example of sidigi / laravel-remote-models
1. Go to this page and download the library: Download sidigi/laravel-remote-models library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
sidigi / laravel-remote-models example snippets
'defaults' => [
'response_key' => 'data',
'pagination_strategy' => 'page_based',
],
'providers' => [
'aws-lambda' => [
'class' => Sidigi\LaravelRemoteModels\Providers\AwsLambdaProvider::class,
],
'http' => [
'class' => Sidigi\LaravelRemoteModels\Providers\HttpProvider::class,
],
],
'pagination_strategies' => [
'page_based' => [
'class' => Sidigi\LaravelRemoteModels\Pagination\PaginationBaseStrategy::class,
'response_number_key' => 'meta.pages_count',
'defaults' => [
'number' => 1,
'size' => 100,
],
],
],
'clients' => [
'comment-client' => [
'client' => App\RemoteClients\CommentClient::class,
'base_uri' => 'https://jsonplaceholder.typicode.com',
| 'provider' => 'http',
'pagination_strategy' => 'page_based',
'paths' => [
'index_comments' => 'comments',
'index_comments_filter_by_post' => '/comments?postId={id}',
'todo_detail' => 'todos/{id}',
],
],
'aws-comment-client' => [
'client' => App\RemoteClients\AwsCommentClient::class,
'base_uri' => 'https://jsonplaceholder.typicode.com',
| 'provider' => 'aws-lambda',
'function_name' => 'user-service-api',
'pagination_strategy' => 'page_based',
'paths' => [
'index_comments' => 'comments',
'index_comments_filter_by_post' => '/comments?postId={id}',
'todo_detail' => 'todos/{id}',
],
],
],
'models' => [
App\RemoteModels\Comment::class => 'comment-client',
//or
App\RemoteModels\Comment::class => App\RemoteClients\CommentClient::class,
//or
App\RemoteModels\Comment::class => [
'aws' => 'aws-comment-client',
'http' => 'comment-client',
]
],
use Sidigi\LaravelRemoteModels\Client;
class CommentClient extends Client
{
}
$comments = Comment::getRemoteClient()->get();
$comments = Comment::getRemoteClient()->get('/comments');
$comments = Comment::getRemoteClient()->get('/comments/{id}', ['id' => 1]);
$comments = Comment::getRemoteClient()->get('/comments/{id}', ['id' => 1, 'active' => true]);
$comments = Comment::getRemoteClient()->withPath('/comments/{id}', ['id' => 1])->get();
$comments = Comment::getRemoteClient()->withQuery(['active' => true])->get();
$comments = Comment::getRemoteClient()->get(['active' => true]);
use Sidigi\LaravelRemoteModels\Client;
class CommentClient extends Client
{
public function getPaths() : array
{
return [
'index_comments' => 'comments',
'detail_comment' => 'comment/{id}',
]
}
}
$comments = CommentClient::withPath('index_comments')->get();
$comments = CommentClient::indexComments()->get();
$comments = CommentClient::withPath('detail_comment', ['id' => 1])->get();
$comments = CommentClient::detailComment(['id' => 1])->get();
$comments = CommentClient::detailComment(['id' => 1])->withQuery(['active' => true])->get();
use Sidigi\LaravelRemoteModels\Client
class CommentClient extends Client
{
}
$comments = CommentClient::withPath('/comments/{id}', ['id' => 1])
->withQuery(['active' => true])
->filter(['id' => [1, 2, 3])
->
use Sidigi\LaravelRemoteModels\Client;
class CommentClient extends Client
{
}
class Comment extends Model
{
use HasRemotes;
protected $guarded = [];
public function getRemoteClient(): string
{
return resolve(CommentClient::class);
}
}
$comment = Comment::getRemoteClient()
->indexComments()
->get() //response with models
->mapModel(Comment::class, fn ($item) => ['id' => $item['id']])
->first();
//App\RemoteModels\Comment
$comment = Comment::getRemoteClient()
->indexComments()
->withHeaders(['X-Foo' => 'X-Baz']) //withToken, withAuth, etc.
->get() //response with models
->mapModel(Comment::class)
->first();
//App\RemoteModels\Comment
$builder = Comment::getRemoteClient()->indexComments();
foreach ($builder->perPage() as $response) {
$comments = $response->mapModel(Note::class);
}
$builder = Post::getRemoteClient()->index();
foreach ($builder->perPage() as $response) {
$comments = $response->mapModel(
Comment::class,
fn ($item) => ['id' => $item['id']],
'data.*.comments'
);
}
$builder = Post::getRemoteClient()->index();
foreach ($builder->perPage() as $response) {
$commentIds = $response->get('data.*.comments.*.id');
}