我正在创建一个基本的CMS来自学Laravel和PHP的基础知识。
我有一个'pages'表,我正在存储一个url_title。出于显而易见的原因,我希望此URL标题是唯一的。但是,无论我做什么来验证它,都会失败。无论如何它只是保存。我确信这很简单。你能发现这段代码有什么问题吗?
我也在视图中使用Former,也没有验证。我尝试将值硬编码为唯一方法中的最后一个选项,它也失败了。
http://anahkiasen.github.io/former/
http://laravel.com/docs/validation#rule-unique
状态:唯一:表,列,除了,idColumn
这是我的控制器:
public function store()
{
$validation = Pages::validate(Input::all());
if($validation->fails()) {
Former::withErrors($validation);
return View::make('myview');
} else {
Pages::create(array(
'title' => Input::get('title'),
'url_title' => Input::get('url_title'),
'status' => Input::get('status'),
'body' => Input::get('body'),
'seo_title' => Input::get('seo_title'),
'seo_description' => Input::get('seo_description')
));
//check which submit was clicked on
if(Input::get('save')) {
return Redirect::route('admin_pages')->with('message', 'Woo-hoo! page was created successfully!')->with('message_status', 'success');
}
elseif(Input::get('continue')) {
$id = $page->id;
return Redirect::route('admin_pages_edit', $id)->with('message', 'Woo-hoo! page was created successfully!')->with('message_status', 'success');
}
}
}
这是我的模特:
class Pages extends Eloquent {
protected $guarded = array('id');
public static $rules = array(
'id' => 'unique:pages,url_title,{{$id}}'
);
public static function validate($data) {
return Validator::make($data, static::$rules);
}
}
我尝试了以下内容:
public static $rules = array(
// 'id'=> 'unique:pages,url_title,{{$id}}'
// 'id'=> 'unique:pages,url_title,$id'
// 'id'=> 'unique:pages,url_title,:id'
// 'id'=> 'unique:pages,url_title,'. {{$id}}
// 'id'=> 'unique:pages,url_title,'. $id
);
有什么想法吗?我跟那个创造了前者的人交谈过。他也不能为此做头或尾。他建议追踪它以找到我们用什么查询Laravel来检查唯一性并尝试直接在我的数据库中运行它以查看会发生什么。我找不到要执行此操作的查询。有谁知道在哪里追踪它?
非常感谢
答案 0 :(得分:0)
你的规则应该是:
public static $rules = array(
'url_title' => 'unique:pages,url_title,{{$id}}'
);
正如我从您的代码Input::get('url_title')
中猜到的那样
您必须使用表单中使用的field
名称。
答案 1 :(得分:0)
谢谢偷看。我一直在使用Laravel独特的解决方案,但效果不佳。我发现这个包可以很好地解决这个问题。
https://github.com/cviebrock/eloquent-sluggable#eloquent
绝对值得一看。
感谢您的反馈。