Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel LoginController和RegisterController的JSON错误应该是字符串而不是数组_Laravel_Laravel 5.5 - Fatal编程技术网

Laravel LoginController和RegisterController的JSON错误应该是字符串而不是数组

Laravel LoginController和RegisterController的JSON错误应该是字符串而不是数组,laravel,laravel-5.5,Laravel,Laravel 5.5,我使用的是Laravel5.5.14(php artisan--version)。我正在使用Laravel创建一个RESTAPI 当我出现错误时,它的形状如下所示: [ 'message' => 'The given data was invalid.', 'errors' => [ 'email' => ['The email field is required.'], 'password' => ['The passwo

我使用的是Laravel5.5.14(
php artisan--version
)。我正在使用Laravel创建一个RESTAPI

当我出现错误时,它的形状如下所示:

[
    'message' => 'The given data was invalid.',
    'errors' => [
        'email' => ['The email field is required.'],
        'password' => ['The password field is required.']
    ]
]
public function __construct()
{
    $this->middleware('guest')->except('logout');
}

public function login(Request $request)
{
    $this->validateLogin($request);

    if ($this->attemptLogin($request)) {
        $user = $this->guard()->user()->load('pets');
        $user->generateToken();

        return $user;
    }

    return $this->sendFailedLoginResponse($request);
}

public function logout(Request $request)
{
    $user = Auth::guard('api')->user();

    if ($user) {
        $user->api_token = null;
        $user->save();
    }

    return ['ok' => true];
}
public function __construct()
{
    $this->middleware('guest');
}

/**
 * The user has been registered.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  mixed  $user
 * @return mixed
 */
protected function registered(Request $request, $user)
{
    $user->generateToken();

    return response()->json($user, 201);
}

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
}
我的

我们看到在
errors
数组中,每个字段(
email
password
)不是字符串,而是单个字符串的数组。是否会有不止一个错误?这就是为什么它是一个数组?即使有不止一个错误,我想告诉Laravel只报告第一个没有数组的错误,这可能吗

在我的
api.php
中,我有:

Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout');
Route::post('register', 'Auth\RegisterController@register');
我的
LoginController.php
如下所示:

[
    'message' => 'The given data was invalid.',
    'errors' => [
        'email' => ['The email field is required.'],
        'password' => ['The password field is required.']
    ]
]
public function __construct()
{
    $this->middleware('guest')->except('logout');
}

public function login(Request $request)
{
    $this->validateLogin($request);

    if ($this->attemptLogin($request)) {
        $user = $this->guard()->user()->load('pets');
        $user->generateToken();

        return $user;
    }

    return $this->sendFailedLoginResponse($request);
}

public function logout(Request $request)
{
    $user = Auth::guard('api')->user();

    if ($user) {
        $user->api_token = null;
        $user->save();
    }

    return ['ok' => true];
}
public function __construct()
{
    $this->middleware('guest');
}

/**
 * The user has been registered.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  mixed  $user
 * @return mixed
 */
protected function registered(Request $request, $user)
{
    $user->generateToken();

    return response()->json($user, 201);
}

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
}
我的
RegisterController.php
如下所示:

[
    'message' => 'The given data was invalid.',
    'errors' => [
        'email' => ['The email field is required.'],
        'password' => ['The password field is required.']
    ]
]
public function __construct()
{
    $this->middleware('guest')->except('logout');
}

public function login(Request $request)
{
    $this->validateLogin($request);

    if ($this->attemptLogin($request)) {
        $user = $this->guard()->user()->load('pets');
        $user->generateToken();

        return $user;
    }

    return $this->sendFailedLoginResponse($request);
}

public function logout(Request $request)
{
    $user = Auth::guard('api')->user();

    if ($user) {
        $user->api_token = null;
        $user->save();
    }

    return ['ok' => true];
}
public function __construct()
{
    $this->middleware('guest');
}

/**
 * The user has been registered.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  mixed  $user
 * @return mixed
 */
protected function registered(Request $request, $user)
{
    $user->generateToken();

    return response()->json($user, 201);
}

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
}
发件人:

$errors
变量将是
illible\Support\MessageBag

显示错误的示例如下:

@if($errors->any())
    @foreach($errors->all()作为$error)
  • {{$error}}
  • @endforeach
@恩迪夫
验证登录
覆盖到以下内容,或者您可以给它一个
不同的
名称,并从
控制器
功能调用它-

public function validateLogin($request){
  $rules = [
        'user_name' => 'required|string',
        'password' => 'required|string',
    ];
    $validator = Validator::make($request->all(), $rules);

    if ($validator->fails()) {
        $errorResponse = $this->validationErrorsToString($validator->errors());
        return response()->json(['message' => 'The given data was invalid.', 'errors' => $errorResponse],400);
    }
}
并使用此方法创建另一个函数,将您的响应转换为预期格式-

private function validationErrorsToString($errArray) {
    $valArr = array();
    foreach ($errArray->toArray() as $key => $value) {
        $valArr[$key] = $value[0];
    }
    return $valArr;
}
不要忘了在控制器文件的
开始处添加此项-

use Validator;

希望这对您有所帮助:)

谢谢您,先生。但是,我没有使用blade或php来渲染。我在用react。特别是
redux form
,所以我需要
errors
成为
字段名:string
,如果可能的话。@Blagoh您可以将对象转换成您想要的任何东西,然后再将其发送到React。如果需要字符串,请为每个错误消息创建一个变量,并将这些变量发送给React。是否有一个可以编辑的单一/全局位置,用于所有错误?我对Laravel不是很在行,所以这些聊天对我的学习很有帮助。@Blagoh你可以为此创建一个类似的transformer方法。谢谢Alexey,我会尝试一下。你能给我们展示一下$this->validateLogin($request)吗实现??谢谢@Sohel0415-我在
LoginController.php
中找不到
validateLogin
方法,还有其他地方可以使用吗?