GithubHelp home page GithubHelp logo

liyu001989 / dingo-serializer-switch Goto Github PK

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

A middleware to switch fractal serializers in dingo

License: MIT License

PHP 100.00%
dingo laravel serializer transformer

dingo-serializer-switch's People

Contributors

liyu001989 avatar lloricode avatar varroreve avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

dingo-serializer-switch's Issues

使用中间件不生效

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

image

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}"
        ]
    }
}

没有分页时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.