【发布时间】:2014-03-14 21:57:24
【问题描述】:
我正在创建一个基本的 CMS 来自学 Laravel 和 PHP 的基础知识。
我有一个 'pages' 表并且我正在存储一个 url_title。出于显而易见的原因,我希望这个 URL 标题是唯一的。但是,无论我做什么来验证它,都失败了。无论如何它只是保存。我敢肯定这很简单。你能发现这段代码有什么问题吗?
我也在视图中使用了Former,这也没有验证。我尝试将值硬编码为唯一方法中的最后一个选项,但它也失败了。
http://anahkiasen.github.io/former/
http://laravel.com/docs/validation#rule-unique
状态:unique:table,column,except,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
);
有什么想法吗?我和创建Former的人交谈过。他也无能为力。他建议跟踪它以找到我们 Laravel 用来检查唯一性的查询,并尝试直接在我的数据库中运行它以查看会发生什么。我找不到执行此操作的查询。有谁知道去哪里找?
非常感谢
【问题讨论】:
-
在数据库中使用唯一的列,以便复制失败?....如果没有任何效果,至少它可以保持完整性。
-
谢谢 itachi。我不确定我是否跟随。我正在尝试使用 ID,它是唯一的测试对象,我希望 url_title 也是唯一的。这有意义吗?
-
如果 id 列是自动递增的,那么无论哪种方式它都是唯一的(意味着不需要针对 id 进行测试)。你只需要看看蛞蝓是否是独一无二的。
-
啊,好的。这适用于更新条目吗?我想我可以使用一些不同的规则。谢谢伊藤。我对此很陌生,因此非常感谢我能获得的所有帮助。干杯。
-
你为什么不使用普通的旧 laravel 基本验证?
标签: php mysql validation laravel-4 unique