2015-10-12 15 views
6

Ich möchte die Werte meiner Tabelle Spaltensatz als eindeutigen Wert, wie kann ich verwenden, um Fehler einzustellen, wenn im Formular einfügen, ich den gleichen Wert wie Daten in meiner Datenbank einfügen?

Ist es wahr?So verwenden Sie eindeutige Regeln im aktiven Datensatz 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

Haben Sie versucht, die gleichen Werte einzugeben? – Sergey

+0

Ja, ich versuche, die gleichen Werte einzufügen, ich möchte den Fehler anzeigen, wenn ich dieselben Werte einfüge. Wie kann ich das machen? –

+2

Versuchen Sie, einen eindeutigen Validator zu erhalten, der nur am Frontend funktioniert? Weil nur das Backend die eigentliche Datenbanksuche durchführen kann. Dies bedeutet, dass dieser Validator nur in der Ajax- und Backend-Validierung und nicht in der Frontend-Validierung verwendet wird. Sehen Sie sich auch die Eigenschaft [skipOnError] (http://www.yiiframework.com/doc-2.0/yii-validators-validator.html#$skipOnError-detail) an, standardmäßig wird nur der erste Fehler angezeigt. – Beowulfenator

Antwort

5

auf diese Weise versuchen

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

Dank Inkognito, aber der Formularfehler zeigt nicht in der Form. wie man den Formfehler zeigt? –

8

Denken Sie daran: Model, View, Controller.

Modell einzigartigen Validator in Ihren Regeln wie

Modell hinzufügen
... 
[['nama_barang'], 'unique'], 
... 

Ansicht

Aktivieren Ajax-Validierung in der Formularansicht

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

-Controller

Hinzufügen Ajax Validierung in Ihrem Controller Aktion erstellen

... 
    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())) { 
... 

und Update-Aktion

... 
    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: falls nicht vorhanden, erforderliche Klassen in Ihrem Controller hinzuzufügen.

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

Es ist Arbeit für mich, aber ich habe ein Problem. Ich habe eine andere Spalte namens "evidence", ich habe es als "erforderlich" festgelegt. Nachdem ich Ihren Vorschlag befolgt habe, wurde das Feld "Evidence" im Formular immer als leer angezeigt, obwohl ich einen Eingabewert eingegeben habe. Vielen Dank – Blackjack

0

Stellen Sie einfach einzigartig in den Regeln [['name'], 'unique'],

Im Folgenden finden Sie die komplette Funktion.

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']], 
     ]; 
    } 
Verwandte Themen