Code Monkey home page Code Monkey logo

laravel-pre-request's Introduction

This is a pre request processing package of laravel

What is my thinking?

In the daily developing , you may use the MVC pattern,
but as the project gets heavier and heavier,
you will find the controllers were become too fatter to maintain.

What should we do?

use the Ablegang/laravel-pre-request.

you may get it by :

composer require chinaobject/laravel-pre-request

What can the laravel-pre-request do?

  • reducing the controller's complexity
  • check the route parameters
  • parameters assembling

Use this package , you will split the code about check from the controller.
For example:

// before use this package,you may write the controller in this way

namespace App\Http\Controllers;

use Illuminate\Routing\Controller;

class Login extends Controller
{
    public function __invoke(Request $request)
    {
        $this->validate($request,[
            'username' => 'required|email|exists:users,email'
        ],[
            'username.required' => 'username is required' ,
            'username.email' => 'username is an email' , 
            'username.exists' => 'username not found'
        ]);
    }
}

Ok,in this way,if the login logic is very complex,you can imagine how big the controller was.
So,the laravel framework provides the FormRequest to solve this problem.
But,you know,the FormRequest can only check the Request's params,it can't check the router's params.
If you want to use the restful at your api,you may only use the "route pattern" for check params.
As you knows,the "route pattern" can only provide simple checking,such as "required","format"...

Use laravel-pre-request package:

namespace App\Http\FormRequest;

use Chinaobject\PreRequest\PreRequest;

class LoginRequest extends PreRequest
{
    public function rules()
    {
        // the check rules , you can also check the route parameters in this function
        return [
            'username' => 'required',
            'client_ids' => 'array'
        ];
    }
    
    public function messages()
    {
        // the invaild messages
        return [
            'username.*' => 'username must be required',
            'client.*' => 'client must be array'
        ];
    }
    
    public function authorize()
    {
        // the authorize check , if you want to check the authorize , you may wirte the logic for yourself.
        return true;
    }
    
    public function assembling()
    {
        // the parameters assembling ,
        // before they were injected to controller,you may wang to assemble the parameters 
        
        // if the request parameters is an array[1,2,3];
        
        $client = ['web','ios','android'];
        
        $data = [];
        foreach($this->data['client'] as $v) {
            $data[] = $client[$v];
        }
        $this->data['client'] = $data;
        
        return $this->data; 
        
        // Ok,you can get the assembled data by $request->fullData() in controller.
        // Of cause , you must inject this FormRequest into your controller.
    }
}

That's all.Thanks for your reading.

Feel free to email me if you have any question,[email protected]

laravel-pre-request's People

Contributors

ablegang avatar xinhaonaner avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

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.