简体   繁体   English

laravel请求验证问题

[英]laravel request validation issue

Here is my view code: 这是我的查看代码:

<!-- form.blade.php -->
<form class="form-horizontal" action="{{ isset($article) ? URL('console/articles/'.$article->id) : URL('console/articles') }}" method="POST">
  @if (isset($article))
    <input name="_method" type="hidden" value="PUT">
  @endif
  @unless (empty($errors->first()))
      <div class="alert alert-danger alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        ...
      </div>
  @endunless
  <input type="hidden" name="_token" value="{{ csrf_token() }}">
  <div class="form-group {{ $errors->has('title') ? 'has-error' : '' }}">
    <label for="article_title" class="col-sm-2 control-label">...</label>
    <div class="col-sm-8">
      <input type="text" name="article[title]" id="article_title" class="form-control" placeholder="..." value="{{isset($article) ? $article->title : old('title')}}">
      {!! $errors->first('title', '<p class="help-block">:message</p>') !!}
    </div>
  </div>
  <div class="form-group {{ $errors->has('body') ? 'has-error' : '' }}">
    <label for="article_body" class="col-sm-2 control-label">...</label>
    <div class="col-sm-8">
      <textarea name="article[body]" id="article_body" cols="30" rows="10" class="form-control">{{isset($article) ? $article->body : old('body')}}</textarea>
      {!! $errors->first('body', '<p class="help-block">:message</p>') !!}
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-8">
      <button type="submit" class="btn btn-success">...</button>
    </div>
  </div>
</form>

and request validator: 并要求验证者:

// StoreArticleRequest.php
// ...
public function rules()
{
  switch ($this->method()) {
    case 'GET':
    case 'DELETE': {
      return [];
    }
    case 'POST': {
      return [
        'article.title' => 'required|unique:articles|max:255',
        'article.body' => 'required'
      ];
    }
    case 'PUT':
    case 'PATCH': {
      return [
        'article.title' => 'required|unique:articles,title,'.Route::input('articles').'|max:255',
        'article.body' => 'required'
      ];
    }
    default:
      break;
  }
  return [];
}
// ...

After send post request to create method, it raise 发送帖子请求创建方法后,它引发

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'article.title' in 'where clause' SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ article.title”

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'article.title' in 'where clause' (SQL: select count(*) as aggregate from articles where article . title = test) 列未找到:SQLSTATE [42S22] 1054未知列'article.title'在'where子句'(SQL:SELECT COUNT(*)从总articles ,其中articletitle =测试)


Updated 更新

Here`s my controller code: 这是我的控制器代码:

// ArticlesController.php
// ...
public function store(StoreArticleRequest $request)
{
  $article = new Article($request->input('article'));
  if ($article->save()) {
    return redirect('console/articles')->with('success', '...');
  } else {
    return redirect()->back()->withInput();
  }
}

// ...
public function update(StoreArticleRequest $request, $id)
{
  $article = Article::find($id);
  if ($article->update($request->input('article'))) {
    return redirect('console/articles')->with('success', '...');
  } else {
    return redirect()->back()->withInput();
  }
}

// ...

Change your rules in StoreArticleRequest.php file StoreArticleRequest.php文件中更改规则

case 'POST': {
  return [
    'article.title' => 'required|unique:articles,title|max:255',
    'article.body' => 'required'
  ];
}

if you not specify column name in unique validation it take consider key as column name. 如果您未在唯一验证中指定列名,则将视为列名。

代替使用article [title]作为输入名称,使用title作为输入名称,在规则中使用title代替article.title

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM