GithubHelp home page GithubHelp logo

liyu001989 / dingo-serializer-switch Goto Github PK

View Code? Open in Web Editor NEW
48.0 2.0 12.0 14 KB

A middleware to switch fractal serializers in dingo

License: MIT License

PHP 100.00%
laravel dingo serializer transformer

dingo-serializer-switch's Issues

laravel 5.2 使用中间件报错

环境:laravel 5.2
在 app/Http/Kernel.php 中定义了中间件。

protected $middleware = [
    \Liyu\Dingo\SerializerSwitch::class,
];

路由文件:

$api->version('v1', [
    'namespace' => 'App\Http\Controllers\Api',
    'middleware' => 'serializer:array',
], function($api) {});

访问接口时报错

{
    "message": "Undefined offset: 1",
    "status_code": 500,
    "debug": {
        "line": 22,
        "file": "/home/vagrant/Code/million-angels/vendor/liyu/dingo-serializer-switch/src/SerializerSwitch.php",
        "class": "ErrorException",
        "trace": [
            "#0 /home/vagrant/Code/million-angels/vendor/liyu/dingo-serializer-switch/src/SerializerSwitch.php(22): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(8, 'Undefined offse...', '/home/vagrant/C...', 22, Array)",
            "#1 /home/vagrant/Code/million-angels/vendor/liyu/dingo-serializer-switch/src/SerializerSwitch.php(34): Liyu\\Dingo\\SerializerSwitch->getDriver('data_array')",
            "#2 [internal function]: Liyu\\Dingo\\SerializerSwitch->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#3 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(136): call_user_func_array(Array, Array)",
            "#4 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(44): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#5 [internal function]: Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#6 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(136): call_user_func_array(Array, Array)",
            "#7 [internal function]: Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#8 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): call_user_func(Object(Closure), Object(Dingo\\Api\\Http\\Request))",
            "#9 /home/vagrant/Code/million-angels/vendor/dingo/api/src/Http/Middleware/Request.php(127): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))",
            "#10 /home/vagrant/Code/million-angels/vendor/dingo/api/src/Http/Middleware/Request.php(103): Dingo\\Api\\Http\\Middleware\\Request->sendRequestThroughRouter(Object(Dingo\\Api\\Http\\Request))",
            "#11 [internal function]: Dingo\\Api\\Http\\Middleware\\Request->handle(Object(Illuminate\\Http\\Request), Object(Closure))",
            "#12 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(136): call_user_func_array(Array, Array)",
            "#13 [internal function]: Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
            "#14 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\\Http\\Request))",
            "#15 [internal function]: Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
            "#16 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): call_user_func(Object(Closure), Object(Illuminate\\Http\\Request))",
            "#17 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(132): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))",
            "#18 /home/vagrant/Code/million-angels/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(99): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))",
            "#19 /home/vagrant/Code/million-angels/public/index.php(54): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))",
            "#20 {main}"
        ]
    }
}

使用中间件不生效

下载安装后,在 App\Http\kernel.php 文件中路由中加入该中间件,并在api路由中设置该中间件,发现返回的数据格式并没有改变,是什么原因呢?
image

image

没有分页时pagination返回null,有分页,但是没有上一页时previous也需要返回null

当分页中没有上一页时,previous需要返回null;没有下一页时,next需要返回null.
这样可以保持dingo api接口的完整性,调用api返回数据时因为格式固定了,只需判断有没有值即可,方便使用;
建议改为:

if ($currentPage > 1) {
    $pagination['links']['previous'] = $paginator->getUrl($currentPage - 1);
} else {
    if ($lastPage > 1 && $currentPage == 1) {
        $pagination['links']['previous'] = null;
    }
}

if ($currentPage < $lastPage) {
    $pagination['links']['next'] = $paginator->getUrl($currentPage + 1);
} else {
    if ($lastPage > 1 && $currentPage == $lastPage) {
        $pagination['links']['next'] = null;
    }
}

如下图所示,当是第一页并且有多页时,previous应为null,这样返回的分页格式固定不变,变的是数据和值。
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.