Buscar..


Introducción

Las solicitudes personalizadas (o solicitudes de formulario) son útiles en situaciones en las que uno quiere autorizar y validar una solicitud antes de golpear el método del controlador.

Uno puede pensar en dos usos prácticos, crear y actualizar un registro, mientras que cada acción tiene un conjunto diferente de reglas de validación (o autorización).

Usar solicitudes de formulario es trivial, uno tiene que tipear la clase de solicitud en el método.

Sintaxis

  • php artesano make: solicitar name_of_request

Observaciones

Las solicitudes son útiles al separar su validación del Controlador. También le permite verificar si la solicitud está autorizada.

Creación de solicitudes

php artisan make:request StoreUserRequest

php artisan make:request UpdateUserRequest

Nota : También puede considerar el uso de nombres como StoreUser o UpdateUser (sin el apéndice de Solicitud ) ya que sus Solicitudes de Formulario se colocan en la carpeta app/Http/Requests/ .

Usando solicitud de formulario

Digamos que continúe con el ejemplo del usuario (puede tener un controlador con el método de almacenamiento y el método de actualización). Para usar FormRequests, use el tipo de sugerencia específica.

...

public function store(App\Http\Requests\StoreRequest $request, App\User $user) { 
    //by type-hinting the request class, Laravel "runs" StoreRequest 
    //before actual method store is hit

    //logic that handles storing new user 
    //(both email and password has to be in $fillable property of User model
    $user->create($request->only(['email', 'password']));
    return redirect()->back();
}

...

public function update(App\Http\Requests\UpdateRequest $request, App\User $users, $id) { 
    //by type-hinting the request class, Laravel "runs" UpdateRequest 
    //before actual method update is hit

    //logic that handles updating a user 
    //(both email and password has to be in $fillable property of User model
    $user = $users->findOrFail($id);
    $user->update($request->only(['password']));
    return redirect()->back();
}

Manejo Redirecciones luego de validación.

A veces es posible que desee tener algún inicio de sesión para determinar a dónde se redirige el usuario después de enviar un formulario. Las solicitudes de formulario dan una variedad de formas.

Por defecto, hay 3 variables declaradas en la solicitud $redirect , $redirectRoute y $redirectAction .

Encima de esas 3 variables, puede anular el controlador de redireccionamiento principal getRedirectUrl() .

A continuación se muestra una solicitud de muestra que explica lo que puede hacer.

<?php namespace App;

use Illuminate\Foundation\Http\FormRequest as Request;

class SampleRequest extends Request {

    // Redirect to the given url
    public $redirect;

    // Redirect to a given route
    public $redirectRoute;

    // Redirect to a given action
    public $redirectAction;


    /**
     * Get the URL to redirect to on a validation error.
     *
     * @return string
     */
    protected function getRedirectUrl()
    {

        // If no path is given for `url()` it will return a new instance of `Illuminate\Routing\UrlGenerator`

        // If your form is down the page for example you can redirect to a hash
        return url()->previous() . '#contact';

        //`url()` provides several methods you can chain such as

        // Get the current URL
        return url()->current();

        // Get the full URL of the current request
        return url()->full();

        // Go back
        return url()->previous();

        // Or just redirect back
        return redirect()->back();
    }


    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [];
    }

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow