标签: dingo-api

Dingo API删除"数据"信封

是否有一种简单的方法可以从Dingo API响应中删除"数据"信封.

当我使用此Transformer来转换用户模型时:

class UserTransformer extends EloquentModelTransformer
{

    /**
     * List of resources possible to include
     *
     * @var array
     */
    protected $availableIncludes = [
        'roles'
    ];

    protected $defaultIncludes = [
        'roles'
    ];

    public function transform($model)
    {
        if(! $model instanceof User)
            throw new InvalidArgumentException($model);

        return [
            'id' => $model->id,
            'name' => $model->name,
            'email' => $model->email
        ];
    }

    /**
     * Include Roles
     *
     * @param User $user
     * @return \League\Fractal\Resource\Item
     */
    public function includeRoles(User $user)
    {
        $roles = $user->roles;

        return $this->collection($roles, …
Run Code Online (Sandbox Code Playgroud)

laravel dingo-api laravel-5.2

12
推荐指数
1
解决办法
3443
查看次数

我可以使用转换器来转换来自API而不是来自数据库的数据吗? - Laravel/Fractal

我一直在使用laravel来构建我的API.我使用变换器来转换模型对象的数据.

现在我没有数据库,而是来自API的响应作为数据源,我想将这些数据转换回用户,但我无法这样做.

我的控制器

 public function rocByName(Request $request)
    {
        try {
            $this->roc_by_name_validator->with( $request->all() )->passesOrFail();
            $company_name = $request->input('company_name');
            $result = $this->my_service->getDetailsByName($company_name); //$result has the response object from the API which I want to transform and give it as a response.

             return $this->response->collection($result,new OnboardingTransformer()); //Tried using tranformer like this
        }
        catch (ValidatorException $e) {

            dd($e);

        }

    }
Run Code Online (Sandbox Code Playgroud)

我的变形金刚

<?php

namespace Modules\Onboarding\Transformers;

use League\Fractal\TransformerAbstract;
use App\Entities\OnboardingEntity;  //I dont have an entity since the response is coming from an API!! What will give here?

/** …
Run Code Online (Sandbox Code Playgroud)

php transformer-model laravel dingo-api thephpleague-fractal

11
推荐指数
1
解决办法
2754
查看次数

Laravel 5.4 OAuth与Dingo内部请求

我正在使用Laravel 5.4和Dingo API,我正在尝试使用Laravel的OAuth 2.0(Passport)来处理Internal Dingo请求.以前,我使用的是JWT,但现在我想使用OAuth.这是我之前的调度程序代码,它传递了所需的令牌以对内部请求执行身份验证.

public function getDispatcher()
{
    $token = JWTAuth::fromUser(Auth::user());
    return $this->api->header('Authorization','Bearer'.$token)->be(Auth::user());
}
Run Code Online (Sandbox Code Playgroud)

现在我正在使用OAuth进行身份验证,我的JavaScript代码只需在JavaScript中使用此方法传递cookie即可获得身份验证,这非常有效.

现在我需要修改getDispatcher()方法以在Dingo中的"内部请求"上获取OAuth令牌.有没有人有关于如何做到这一点的任何提示?从理论上讲,我可以为每个用户创建一个个人访问令牌,但这似乎只是内部请求的过度杀伤.任何建议或方法表示赞赏.如何在不通过完整OAuth流程的情况下获取OAuth令牌,或者如何仅为内部请求关闭身份验证.

根据以下答案更新:

'api.auth'自己在路线上(只是Dingo)并且内部请求有效.auth:api(Passport)+ api.auth我得到了内部请求不允许的方法,它以JSON的形式返回.尝试调用内部POST请求时出现{"message":"405 Method Not Allowed"}.(当尝试POST到这些路由时,看起来像301重定向到登录页面,反过来导致API路径以某种方式变成GET,从而抛出405错误).

通过Postman的API请求以反向容量工作.两个活动时都找不到用户(['middleware'=> ['auth:api','api.auth'])当(auth:api只是Passport)激活时它工作正常.

php oauth laravel laravel-5 dingo-api

10
推荐指数
1
解决办法
1201
查看次数

Laravel + Dingo中的一致REST API响应

我一直在开发一套针对移动应用程序公开的其他API.我正在遵循Laravel项目开发的存储库模式.如何实现演示器和转换器,以便在我的所有API集合中格式化常量JSON输出?

例如,我有以下控制器用于登录

public function authenticate()
    {
        $request = Request::all();  
        try {
                // If authenticated, issue JWT token
                //Showing a dummy response
                return $token;
            }  catch (ValidatorException $e) {
                return Response::json([
                    'error'   =>true,
                    'message' =>$e->getMessageBag()
                ]);
            }
    }
Run Code Online (Sandbox Code Playgroud)

现在变压器和演示者在哪里?我知道两者都用于通过转换db对象来格式化输出,并生成格式化的JSON,以便它在我的API中保持一致.

dingo API和fractal甚至框架(L5存储库)都没有提供详细的文档,我找不到任何相关的教程.

我为另一个 API 创建了以下演示者和变换器,它提供了产品列表

namespace App\Api\V1\Transformers;

use App\Entities\Product;
use League\Fractal\TransformerAbstract;

class UserTransformer extends TransformerAbstract {

    public function transform(\Product $product)
    {
        return [
            'id'     => (int) $product->products_id
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

主持人

<?php

namespace App\Api\V1\Presenters;

use App\Api\V1\Transformers\ProductTransformer;
use Prettus\Repository\Presenter\FractalPresenter;

/** …
Run Code Online (Sandbox Code Playgroud)

php rest json laravel dingo-api

9
推荐指数
1
解决办法
2853
查看次数

Laravel 5.3集成了dingo api和oauth2未找到的列:1054'where子句'中的未知列'api_token'

我正在使用laravel 5.3为移动应用程序构建api和后端管理.我集成了Dingo/api包并使用Oauth2进行身份验证.我制作了一个API并使用postman登录:API url:mydomain/api/auth/login登录结果:

{"meta":{"message":"Success","status_code":1000,"status":true},"data":{"access_token":"BK81coQ8mnR7PrfEuYzOwKBuZukXgeVw2pcUjHcZ","token_type":"Bearer","expires_in ":604800,"refresh_token":"KRIB6YnvqT25rG1fGtoMrK9mGeB7m2J3cdj9QB8N","profile":{"id":1,"user_id":1,"name":"ThanhDN","postal_code":null,"phone_number":null," age":null,"gender":null,"address":null,"avatar":null,"status":null,"created_at":"2017-01-11 04:44:33","updated_at": "2017-01-11 04:44:33","deleted_at":null}}}

我使用access_token来调用API以获取用户信息API url:mydomain/api/user/1但是我收到了一个错误:

{"message":"SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'api_token'(SQL:select*from userswhere api_token= 9mQmZqIjqnRamzX7syjtU6X1jGWrfQXndKKT97TU limit 1)","code":"42S22","status_code ":500,

我搜索过但看不到任何解决方案.请帮我解决一下.非常感谢你!!!

即使你调用logout url:mydomain/api/logout

oauth-2.0 dingo-api laravel-5.3

8
推荐指数
1
解决办法
4499
查看次数

显示"消息":"404 Not Found",同时使用dingo在laravel 5.1中创建api

我在laravel 5.1中配置了dingo包,但是当我尝试访问时

HTTP://本地主机:8000 /测试

它显示以下错误

{"message":"404 Not Found","status_code":404,"debug":{"line":161,"file":"C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\RouteCollection.php","class":"Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException","trace":["#0 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(750): Illuminate\\Routing\\RouteCollection->match(Object(Dingo\\Api\\Http\\Request))","#1 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(659): Illuminate\\Routing\\Router->findRoute(Object(Dingo\\Api\\Http\\Request))","#2 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(635): Illuminate\\Routing\\Router->dispatchToRoute(Object(Dingo\\Api\\Http\\Request))","#3 C:\\wamp64\\www\\second\\vendor\\dingo\\api\\src\\Routing\\Adapter\\Laravel.php(81): Illuminate\\Routing\\Router->dispatch(Object(Dingo\\Api\\Http\\Request))","#4 C:\\wamp64\\www\\second\\vendor\\dingo\\api\\src\\Routing\\Router.php(513): Dingo\\Api\\Routing\\Adapter\\Laravel->dispatch(Object(Dingo\\Api\\Http\\Request), 'v1')","#5 C:\\wamp64\\www\\second\\vendor\\dingo\\api\\src\\Http\\Middleware\\Request.php(126): Dingo\\Api\\Routing\\Router->dispatch(Object(Dingo\\Api\\Http\\Request))","#6 [internal function]: Dingo\\Api\\Http\\Middleware\\Request->Dingo\\Api\\Http\\Middleware\\{closure}(Object(Dingo\\Api\\Http\\Request))","#7 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(139): call_user_func(Object(Closure), Object(Dingo\\Api\\Http\\Request))","#8 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))","#9 [internal function]: Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))","#10 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(124): call_user_func_array(Array, Array)","#11 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\View\\Middleware\\ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))","#12 [internal function]: Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))","#13 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(124): call_user_func_array(Array, Array)","#14 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php(62): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))","#15 [internal function]: Illuminate\\Session\\Middleware\\StartSession->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))","#16 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(124): call_user_func_array(Array, Array)","#17 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))","#18 [internal function]: Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))","#19 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(124): call_user_func_array(Array, Array)","#20 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\EncryptCookies.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))","#21 [internal function]: Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))","#22 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(124): call_user_func_array(Array, Array)","#23 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode.php(44): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))","#24 [internal function]: Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))","#25 C:\\wamp64\\www\\second\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(124): call_user_func_array(Array, …
Run Code Online (Sandbox Code Playgroud)

php api laravel-5 dingo-api

8
推荐指数
1
解决办法
786
查看次数

未定义Auth防护驱动程序[api].Lumen,Dingo,JWTAuth

我正在尝试使用流明开发一个休息api.对于身份验证我使用的是Dingo和JWTAuth api,但是我收到以下消息:

未定义Auth防护驱动程序[api].

下面是Postman的消息截图,包括stacktrace.

邮差错误的截图

jwt dingo-api lumen

8
推荐指数
1
解决办法
5897
查看次数

Laravel Dingo API以及Middleware \\ VerifyCsrfToken.php的问题

我使用Dingo和Laravel 5.1来创建简单的API.

所以在route.php我有:

$api = app('Dingo\Api\Routing\Router');

$api->version('v1', function($api) {

    $api->get('getvoucher', 'App\Http\Controllers\BitemsController@index');
    $api->get('update/{key}', 'App\Http\Controllers\BitemsController@update');
    $api->post('store', 'App\Http\Controllers\BitemsController@store');

    $api->post('authenticate', 'App\Http\Controllers\AuthenticateController@authenticate');
$api->post('logout', 'App\Http\Controllers\AuthenticateController@logout');
$api->get('token', 'App\Http\Controllers\AuthenticateController@getToken');

});
Run Code Online (Sandbox Code Playgroud)

我的BitemsController是:

public function index(Request $request)
    {

        $bitem = Bitem::where('key',$request->key)->where('id',$request->pin)->first();

        return $bitem;
    }


    public function store(Request $request)
    {
        $bitem = new Bitem($request->all());
        $bitem->save;
        return $bitem;
    }
Run Code Online (Sandbox Code Playgroud)

现在我使用POSTMAN应用程序来测试API,当我将GET发送到localhost时:8888/api/getvoucher一切都很好,但是当我发出POST请求来存储一些数据时,我得到了错误:

"message": "500 Internal Server Error",
    "status_code": 500,
    "debug": {
        "line": 53,
        "file": "C:\\wamp\\www\\dine\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php",
        "class": "Illuminate\\Session\\TokenMismatchException",
        "trace": [
Run Code Online (Sandbox Code Playgroud)

邮差: 在此输入图像描述

要解决此问题,我尝试添加:

protected $except = [
    'api/*',
];
Run Code Online (Sandbox Code Playgroud)

在中间件VerifyCsrfToken.php中,但是工作.

请告诉我如何解决我的问题......

php middleware csrf laravel dingo-api

7
推荐指数
1
解决办法
432
查看次数

Laravel 多域来源 CORS

我希望在我的 laravel 中允许两个用于 CORS 的域能够在本地和服务器上使用它,因此我不想将我的应用程序暴露给任何域。这就是我现在所拥有的

public function handle($request, Closure $next)
    {
        return $next($request)
            ->header('Access-Control-Allow-Origin', 'http://localhost:4200')
//            ->header('Access-Control-Allow-Origin', 'http://api.example.com')
            ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE')
            ->header('Access-Control-Allow-Headers', 'Content-Type');
    }
Run Code Online (Sandbox Code Playgroud)

我既不能像我评论的那样,也不能像数组那样做

php cors laravel dingo-api

6
推荐指数
2
解决办法
1万
查看次数

Eloquent 模型属性为驼峰式大小写 [Laravel 5.2] [Dingo API]

我们的 Eloquent 模型具有遵循 Laravel 蛇形案例约定的属性。

例如first_namelast_namecreated_at

虽然我的前端(react)遵循 javascript 驼峰式大小写标准。

例如firstNamelastNamecreatedAt

发送 API 响应时是否有一种简单的方法可以将所有属性转换为驼峰式大小写?

我们使用 Larave 5.2 和 Dingo API 包。


更新

根据接受的答案,我使用了自定义响应格式方法。请参阅以下实施要点(包括单元测试):

https://gist.github.com/andrewmclagan/c5e0fe601d23f3b859b89a9f8922be68

javascript php laravel reactjs dingo-api

5
推荐指数
1
解决办法
4578
查看次数