使用表单请求更新方法Laravel 5.4进行编辑时的独特slug

时间:2017-10-08 19:32:58

标签: php laravel-5 eloquent

嘿我用这种更新方法很难我在我的新闻模型中有一个slug字段并且它必须是唯一的,现在当我更新有时我可能不想更改slug但是laravel的验证不是让我发送我的数据,当我绕过验证Mysql不会让我插入slug字段因为重复。这是我的更新方法和验证我有一个handleRequest,它只是为了验证上传的图像。

NewsController

public function update(CreateNewsRequest $request, $id)
{
        $news = News::findOrFail($id);    
        $data = $this->handleRequest($request);              
        $news->update($data);

    return redirect(route('admin.access.news.index'))->with('message', 'Your news has been updated');
}

CreateNewsRequest

 public function authorize()
{
    //if(access()->hasRole(1) || access()->hasRole(2))
    return true;
}


 public function rules(){     

$news = $this->route()->parameter('news');

$rules = [
    'title' => 'required',
    'slug' => 'required|unique:news',
    'excerpt' => 'required',
    'body' => 'required',
    'category_id' => 'required',
    'image' => 'mimes:gif,bmp,jpeg,jpg,png',
];

    switch($this->method()){
    case 'PUT':
    case 'PATCH':
        $rules['slug'] = 'required|unique:news,slug,' .$news;
        break;
    }

return $rules;
}

}

我现在把这个函数放在NewsController中

private function handleRequest($request)
{
    if(! $request->published_at ){
            $request->published_at = null;
        }

    $data = $request->all();

    if($request->hasFile('image'))
    {

        $image = $request->file('image');          
        $fileName = $image->getClientOriginalName();            
        $destination = public_path(config('cms.image.directory'));                      
        $successUploaded = $image->move($destination, $fileName);

        if($successUploaded)
        {
            $width = config('cms.image.thumbnail.width');
            $height = config('cms.image.thumbnail.height');
            $extension = $image->getClientOriginalExtension();
            $thumbnail = str_replace(".{$extension}", "_thumb.{$extension}", $fileName);
            Image::make($destination . '/' . $fileName)
                        ->resize($width, $height)
                        ->save($destination . '/' . $thumbnail);
        }
        $data['image'] = $fileName;
    }
    return $data;
}

2 个答案:

答案 0 :(得分:1)

您应该按id忽略当前模型,而不是可以在更新形式中更改的其他字段。试试这个:

switch($this->method()){
    case 'PUT':
    case 'PATCH':
        $id = $this->route('id');
        $rules['slug'] = 'required|unique:news,slug,'.$id;
        break;
    }

答案 1 :(得分:1)

@AndriyLozynskiy编辑工作!事实证明我在表格中有一个错误,谢谢你的帮助。

我还稍微更改了验证并创建了UpdateFormRequest.php

int LargestProduct (string numStr, int groupSize) {
    int numOfGroups = numStr.size() - 1;
    int largestProduct = 0, thisProduct = 1;

    for (int i = 1; i <= numOfGroups; i++) {

        for (int j = i; j <= i + groupSize - 1; j++)
            thisProduct *= (numStr[j-1] - '0');

        if (thisProduct > largestProduct)
            largestProduct = thisProduct;

        thisProduct = 1;
    }
    return largestProduct;
}