编辑资料时名字没修改但提示报错该怎么办?

file
编辑用户资料 同一用户下仅仅修改其他资料 不想修改名称

嘉宝君
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 18

create(),save()都可以更新数据。

5年前 评论

看你的验证是怎么写的,是不是创建和修改共用了一套规则

5年前 评论
嘉宝君

@FMW 验证的是和教程是一样的 没有做其他修改 教程中看起来并不会出现该问题

5年前 评论

@Torankusu 麻烦还是贴出相应的代码

5年前 评论

在你的 UpdateRequest 试试这个
public function rules()
{
$id = $this->route('user'); //获取当前需要排除的id,这里的 user 是 路由 {} 中的参数
return [
'userName' => "required|unique:users,userName,".$id,
];
}

5年前 评论
嘉宝君

@FMW

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Auth;
class UserRequest 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 [
            'name'=>'required|between:3,25|regex:/^[A-Za-z0-9\-\_]+$/|unique:users,name',
            'email' => 'required|email',
            'introduction' => 'max:80',

        ];
    }
    public function messages()
    {
        return [
            'name.unique' => '用户名已被占用,请重新填写',
            'name.regex' => '用户名只支持英文、数字、横杆和下划线。',
            'name.between' => '用户名必须介于 3 - 25 个字符之间。',
            'name.required' => '用户名不能为空。',
        ];
    }
}
5年前 评论

@Torankusu 控制器的相关方法呢

5年前 评论
嘉宝君

@miss201 已尝试不可行

5年前 评论
嘉宝君

@FMW

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Http\Requests\UserRequest;

class UsersController extends Controller
{
    public function show(User $user)
    {
        return view('users.show', compact('user'));
    }

    public function edit(User $user)
    {
        return view('users.edit', compact('user'));
    }

    public function update(UserRequest $request, User $user)
    {
        $user->update($request->all());
        return redirect()->route('users.show', $user->id)->with('success', '个人资料更新成功!');
    }
}
5年前 评论

@Torankusu 那我大概知道了,你的store方法估计也是用了UserRequest,所以创建和更新的时候用了同样的验证规则,所以你在要UserRequest里面区分是创建还是更新,一般可以通过提交的方法来判断,比如POST方法是创建,PUT方法是更新,通过方法来分配不同的验证规则

栗子?:

public function rules()
    {
        switch ($this->method()) {
            case 'POST':
                return [
                    'name' => 'required|between:3,25|regex:/^[A-Za-z0-9\-\_]+$/|unique:users,name',
                    'email' => 'required|email',
                    'introduction' => 'max:80',

                ];
                break;
            case 'PUT':
                return [
                    'name' => ['required', 'between:3,25', 'regex:/^[A-Za-z0-9\-\_]+$/', Rule::unique('users')->ignore($this->route('user'))],
                    'email' => 'required|email',
                    'introduction' => 'max:80',

                ];
                break;
            default:
                return [];
        }
    }

message方法也同理,通过方法返回不同的提示消息就可以了

5年前 评论
嘉宝君

@FMW 明白了
另外我想问的是
我看教程例子里没有区分方法
也没提及这一部分 是教程没提 仅做教学
还是说我之前哪里会存在问题

5年前 评论

教程提没提我不太清楚,因为我没看过,你之前的代码有没有问题我也不知道,因为我也没看过。至于不同方法的验证规则,这个其实有很多方法可以去实现,比如你可以通过判断路由,通过判断参数等等各种方式,这里很灵活,没有什么局限,只要rules方法返回一个规则数组就可以了,至于你是怎么决定这个规则,就要看你自己怎么设计了。

我的这个方法也是参考社区的《laravel项目规范》,你可以看一下,希望你会有其他收获

《 Laravel 项目开发规范》

5年前 评论
嘉宝君

@FMW
了解 学习了 感谢~!

5年前 评论

缺少用户名重复性验证,请注意看

file后面应该加上Auth::id(),这样就不会提示错误消息了

5年前 评论
嘉宝君

@Arnold19910326 可能没太明白我的意思 不是没有验证用户名重复性 而是验证了 由于我之前的用户名没改 可能只改了其他资料 没改用户名 导致有冲突

5年前 评论

@Torankusu unique:users,name,'.Auth::id()注意用户名验证部分这里的代码 因为你漏写了后面的.Auth::id() 所以出错了 Auth::id()代表了检查重复时要忽略数据库哪条数据

文档:表单验证:unique:table,column,except,idColumn

5年前 评论

我遇到了同样的问题,先登录再编辑就不会报错了。

5年前 评论

UserRequest.php文件中的用户名的验证后面的 Auth::id()和前面的规则要隔个逗号

file

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!