Получить отформатированные значения из пользовательского запроса формы - Laravel 5.6 - PullRequest
0 голосов
/ 08 ноября 2018

Я использую пользовательский запрос формы для проверки всех входных данных для хранения пользователей.

Мне нужно проверить ввод перед отправкой запроса формы и получить все проверенные данные в моем контроллере.

У меня есть функция регулярного выражения, готовая проверить этот ввод, удалив ненужные символы, пробелы, разрешить только цифры и т. Д.

Будет проверять все данные в контроллере, но все равно не будет успешным.

Input example: 

$ cnpj = 29,258.602 / 0001-25

How i need in controller:

$ cnpj = 29258602000125

UsuarioController

class UsuarioController extends BaseController
{
    public function cadastrarUsuarioExterno(UsuarioStoreFormRequest $request)
  {
     //Would to get all input validated - no spaces, no!@#$%^&*, etc 
     $validated = $request->validated();

     dd($data);
  }
...
}

UsuarioStoreFormRequest

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;

class UsuarioStoreFormRequest extends FormRequest
{

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

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

    return [
        'cnpj' => 'required|numeric|digits:14',
    ];
}

Custom function to validate cnpj

function validar_cnpj($cnpj)
{
$cnpj = preg_replace('/[^0-9]/', '', (string) $cnpj);
// Valida tamanho
if (strlen($cnpj) != 14)
    return false;
// Valida primeiro dígito verificador
for ($i = 0, $j = 5, $soma = 0; $i < 12; $i++)
{
    $soma += $cnpj{$i} * $j;
    $j = ($j == 2) ? 9 : $j - 1;
}
$resto = $soma % 11;
if ($cnpj{12} != ($resto < 2 ? 0 : 11 - $resto))
    return false;
// Valida segundo dígito verificador
for ($i = 0, $j = 6, $soma = 0; $i < 13; $i++)
{
    $soma += $cnpj{$i} * $j;
    $j = ($j == 2) ? 9 : $j - 1;
}
$resto = $soma % 11;
return $cnpj{13} == ($resto < 2 ? 0 : 11 - $resto);
}

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Сделай так:

$string = "29.258.602/0001-25";
preg_match_all('!\d+!', $string, $matches);
return (implode("",$matches[0])); 

Надеюсь на помощь

0 голосов
/ 08 ноября 2018

Вы можете использовать метод prepareForValidation в вашем FormRequest. Таким образом, ваш запрос будет изменен и заменен в запросе до его проверки, и вы можете обычно получить его в контроллере с помощью $request->get('cnpj'); после успешной проверки.

public function prepareForValidation()
{
    $input = $this->all();

    if ($this->has('cnpj')) {
        $input['cnpj'] = $this->get('cnpj'); // Modify input here
    }

    $this->replace($input);
}
0 голосов
/ 08 ноября 2018

Вы можете расширить проверенную функцию в UsuarioStoreFormRequest следующим образом

/**
 * Get the validated data from the request.
 *
 * @return array
 */
public function validated()
{
    $validated = parent::validated();

    //Add here more characters to remove or use a regex
    $validated['cnpj'] = str_replace(['-', '/', ' ', '.'], '', $validated['cnpj']);

    return $validated;
}
...