$30 off During Our Annual Pro Sale. View Details »

QueryFilter: Model Filtering

QueryFilter: Model Filtering

Filtering gives you a bunch of options. Many options and conditionals make your controller bigger and bigger. Let's use the QueryFilter concept to map all query string parameters with our model layer, cleaning up your controller.

Talk presented on Darkmira Tour PHP 2018, in Brasília, DF Brazil,

Junior Grossi

April 14, 2018
Tweet

More Decks by Junior Grossi

Other Decks in Technology

Transcript

  1. QueryFilter: Model Filtering
    Junior Grossi
    @ Darkmira Tour PHP 2018
    April 2018

    View Slide

  2. About me @junior_grossi

    View Slide

  3. Resume
    PHPMG group organizer
    Software Engineer at InterNACHI (PHP/Laravel)
    Creator of Corcel PHP
    Ph.D. in Information Science ‑ UFMG 2018 (in progress)
    Master's in Information Science ‑ UFMG 2015
    Specialization in Web Developmenet ‑ PUCMG 2013
    MBA in Business Management ‑ FGV 2009
    Bachelor's in Computer Science ‑ PUCMG 2007
    Zend Certified Engineer ‑ 2011

    View Slide

  4. Contact
    GitHub: http://github.com/jgrossi
    Twitter: http://twitter.com/junior_grossi
    Blog: https://blog.jgrossi.com

    View Slide

  5. Talk's dynamics
    35' talk + 5' questions = 40'
    20% slides + 80% live coding

    View Slide

  6. What's QueryFilter ?
    Code abstraction for filtering objects based on the `URL.
    From Laracasts: http://laracasts.com

    View Slide

  7. /posts?title=foo&status=bar
    Select Post which title contains foo ;
    Select Post which status is bar .

    View Slide

  8. Example
    Listing posts in JSON format
    Posts from WordPress http://blog.jgrossi.com
    Using Corcel PHP http://github.com/corcel/corcel
    Use WordPress backend with Laravel or any PHP app
    Laravel 5.6 app to handle all the logic

    View Slide

  9. composer require jgrossi/corcel

    View Slide

  10. Listing posts in JSON
    public function index()
    {
    $posts = Post::newest()‑>limit(10)‑>get();
    return PostResource::collection($posts); // json
    }

    View Slide

  11. Filtering by Request
    public function index(Request $request)
    {
    $query = Post::query()‑>newest()‑>limit(10);
    if ($request‑>filled('title')) {
    $value = $request‑>get('title');
    $query‑>where('post_title', 'like', "%$value%");
    }
    if ($request‑>filled('status')) {
    $query‑>where('post_status', $request‑>get('status'
    }
    $posts = $query‑>get();
    return PostResource::collection($posts);
    }

    View Slide

  12. Filtering by QueryFilter
    SOLID's Single responsibility principle
    ... a class should have only a single responsibility.
    Dependency/Method Injection
    ... is a technique whereby one object supplies the
    dependencies of another object.

    View Slide

  13. Show me the code
    Talk is cheap. Show me the code.
    ‑‑ Linus Trovals

    View Slide

  14. After 20 minutes of live coding...

    View Slide

  15. QueryFilter is a concept

    View Slide

  16. Update: Talk's code
    https://github.com/jgrossi/darkmira‑query‑filter

    View Slide

  17. Composer Packages
    cerbero/query‑filters
    kblais/query‑filter

    View Slide

  18. Thanks! Questions?
    GitHub: http://github.com/jgrossi
    Twitter: http://twitter.com/junior_grossi
    Blog: https://blog.jgrossi.com

    View Slide