2015-09-09 2 views
3

Я использую Yii2 и ActiveForm.
в норме, если какой-либо вход в ActiveForm использовал, имя ввода должно быть таким же, как и атрибут ActiveRecord, который является именем столбца связанной таблицы в базе данных.ActiveForm Название в yii2

По какой-то причине я хочу использовать Active TextArea, и это имя также отличается от атрибутов Active Record. Фактически я хочу получить значение TextArea's и взорваться, а затем сохранить в базу данных.

Есть ли способ использовать ActiveInput с другим именем из атрибутов ActiveRecord?

Вид:

<?php $form = ActiveForm::begin([ 
      'id'=>'import-student', 
      'options'=>[ 
       'class'=>'form-horizontal', 
       'enctype'=>'multipart/form-data'] 
      ]); ?>  

    <?= $form->field($model, 'first_name', ['inputOptions'=>[ 
          'placeholder'=>'import Users as text']]) 
      ->textArea(['rows'=>'12','class'=>'form-control']) 
      ->label(false); ?> 
    <?= Html::submitButton('Submint', ['class'=>'btn btn-primary']) ?> 

<?php ActiveForm::end(); ?> 

Контроллер:

public function actionImport() 
{ 
    $model = new Student(); 

    if ($model->load(Yii::$app->request->post()) && $users = $model->saveTextArea()) { 
     Yii::$app->session->setFlash('info', print_r($users)); 
    } 

    return $this->render('import',[ 
     'model'=>$model, 
    ]); 
} 

Модель:

public function attributeLabels() 
{ 
    return [ 
     'id' => Yii::t('backend', 'ID'), 
     'first_name' => Yii::t('backend', 'First Name'), 
     'last_name' => Yii::t('backend', 'Last Name'), 
     'user_id' => Yii::t('backend', 'User ID'), 
     'student_number' => Yii::t('backend', 'Student Number'), 
     'national_id' => Yii::t('backend', 'National ID'), 
     'average' => Yii::t('backend', 'Average'), 
     'vip' => Yii::t('backend', 'Vip'), 
     'location_id' => Yii::t('backend', 'Location ID'), 
    ]; 
} 
public function SaveTextArea() 
{ 
    $users = explode(";", $this->first_name); 
    foreach ($users as $user){ 
     list($first_name,$last_name,$student_number,$national_id) = explode(";", $user); 
    } 
    return $ali; 
} 
+0

Не могли бы вы высказать подробности своего кода, чтобы люди могли вам помочь? –

ответ

2

Да, вы можете просто добавить общий атрибут внутри модели класса:

class MyClass extends \yii\db\ActiveRecord 
{ 
    public $myAttribute; 
    ... 

Вы также должны объявить его в качестве безопасного атрибута и его тип внутри метода правил:

public function rules() 
{ 
    ... 
    [['myAttribute'], 'safe'], 
    ... 

и после этого вы можете сделать любую обработку, используя другое правило:

public function rules() 
{ 
    ... 
    [['myAttribute'], 'safe'], 
    [['myAttribute'], 'myCustomFunction'], 
    ... 
} 

public function myCustomFunction($attribute, $params) 
{ 
    // Do explode and assign attribute values here 
} 
0

Более простой способ заключается в использовании

\yii\helpers\Html::textarea('the_name_you_need', 'value', options) 

Таким образом, вы не обязаны использовать атрибут ActiveRecord

Вы можете прочитать об этом here.

Смежные вопросы