2015-10-12 19 views
6

Tôi muốn đặt giá trị của cột bảng được đặt làm giá trị duy nhất, cách tôi có thể sử dụng để đặt lỗi nếu ở dạng chèn, tôi chèn cùng một giá trị như dữ liệu trong cơ sở dữ liệu của tôi?

Có đúng không?Làm thế nào để sử dụng các quy tắc duy nhất trong hồ sơ hoạt động yii2

public function rules() 
{ 
    return [ 
     [['nama_barang', 'harga', 'stok', 'id_satuan'], 'required'], 
     [['harga', 'stok', 'id_satuan'], 'integer'], 
     ['nama_barang', 'unique', 'targetAttribute' => ['nama_barang' => 'nama_barang']], 
     [['foto'], 'safe'] 
    ]; 
} 
+1

Bạn đã thử chèn các giá trị giống nhau chưa? – Sergey

+0

có, tôi cố gắng chèn các giá trị giống nhau, tôi muốn hiển thị lỗi nếu tôi chèn cùng một giá trị. làm thế nào tôi có thể làm điều này? –

+2

Bạn đang cố gắng để có được validator duy nhất để làm việc hoàn toàn trên lối vào? Bởi vì chỉ có backend mới có thể thực hiện tra cứu cơ sở dữ liệu thực tế. Điều này có nghĩa là trình xác thực này chỉ được sử dụng trong xác thực ajax và backend, và không được xác thực trong giao diện người dùng. Ngoài ra, hãy xem thuộc tính [skipOnError] (http://www.yiiframework.com/doc-2.0/yii-validators-validator.html#$skipOnError-detail), theo mặc định chỉ có lỗi đầu tiên được hiển thị. – Beowulfenator

Trả lời

5

Hãy thử cách này

public function rules() 
{ 
return [ 
    [['nama_barang', 'harga', 'stok', 'id_satuan'], 'required'], 
    [['harga', 'stok', 'id_satuan'], 'integer'], 
    ['nama_barang', 'unique', 'targetAttribute' => ['nama_barang'], 'message' => 'Username must be unique.'], 
    [['foto'], 'safe'] 
    ]; 
} 
+0

nhờ ẩn danh, nhưng lỗi biểu mẫu không hiển thị trong biểu mẫu. làm thế nào để hiển thị lỗi biểu mẫu? –

8

Hãy nhớ rằng: mô hình, xem, điều khiển.

Mẫu thêm validator độc đáo trong các quy tắc mô hình của bạn như

... 
[['nama_barang'], 'unique'], 
... 

Xem

Enable xác nhận ajax theo quan điểm hình thức của bạn

... 
<?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?> 
... 

khiển

Add xác nhận ajax trong điều khiển của bạn Tạo Action

... 
    public function actionCreate() 
    { 
     $model = new Product(); 
     if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { 
      Yii::$app->response->format = Response::FORMAT_JSON; 
      return ActiveForm::validate($model); 
     } 
     if ($model->load(Yii::$app->request->post())) { 
... 

và cập nhật Action

... 
    public function actionUpdate($id) 
    { 
     $model = $this->findModel($id); 
     if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { 
      Yii::$app->response->format = Response::FORMAT_JSON; 
      return ActiveForm::validate($model); 
     } 
     if ($model->load(Yii::$app->request->post())) { 
... 

PS: nếu không có mặt, thêm các lớp cần thiết trong điều khiển của bạn.

use yii\web\Response; 
use yii\widgets\ActiveForm; 
+0

Nó có tác dụng với tôi, nhưng tôi có một vấn đề. Tôi đã có một cột khác có tên là 'bằng chứng', tôi đã đặt nó là 'bắt buộc'. Sau khi tôi đã làm theo đề xuất của bạn, trường Bằng chứng trong biểu mẫu, luôn được đánh dấu là trống khi hiển thị lỗi mặc dù tôi đã nhập giá trị. Cảm ơn – Blackjack

0

Chỉ cần thiết lập duy nhất trong các quy tắc [['name'], 'unique'],

Dưới đây là chức năng hoàn chỉnh.

public function rules() 
    { 
     return [ 
      [['name', 'description', 'comp_id'], 'required'], 
      [['description'], 'string'], 
      [['comp_id'], 'integer'], 
      [['name'], 'string', 'max' => 100,], 
      [['name'], 'unique'], 
      [['comp_id'], 'exist', 'skipOnError' => true, 'targetClass' => Company::className(), 'targetAttribute' => ['comp_id' => 'comp_id']], 
     ]; 
    } 
Các vấn đề liên quan