Fadly Dzil
Fadly Dzil

Reputation: 2206

Implode beforeSave is not working in Yii2 app

Basically, I have a model that I display to standard checkboxlist that have a value.

I got this from my model:

echo $model->bundle_numbers;

Array
(
  [0] => 1
  [1] => 2
  [2] => 3
)

So, in controller:

if ($model->load($request->post()) && $model->save()) {
return [
                'forceReload' => '#crud-datatable-pjax',
                'title' => "Create new OutgoingPipe",
                'content' => '<span class="text-success">Create Outgoing Pipe success</span>',
                'footer' => Html::button('Close', ['class' => 'btn btn-default pull-left', 'data-dismiss' => "modal"]) .
                    Html::a('Create More', ['create'], ['class' => 'btn btn-primary', 'role' => 'modal-remote'])

            ];
}

Now I want to change the array into string format. So, use beforeSave:

 public function beforeSave($insert){
    $this->bundle_numbers = implode(",", $this->bundle_numbers);
    return parent::beforeSave($insert); // TODO: Change the autogenerated stub
}

In rules, based Gii generator model, I remove string rules:

[['bundle_numbers'], 'string', //deleted

But still not success to insert the data. No errors displayed.

Update

I can see all errors:

$model->save(false);
$model->getErrors();

Now, I can see, I have a lot of errors in another rule.

Upvotes: 0

Views: 1229

Answers (3)

ScaisEdge
ScaisEdge

Reputation: 133360

Try if you have some error in load or validate

  if ($model->load($request->post()) {
     if ($model->save()){
        return [
                      'forceReload' => '#crud-datatable-pjax',
                      'title' => "Create new OutgoingPipe",
                      'content' => '<span class="text-success">Create Outgoing Pipe success</span>',
                      'footer' => Html::button('Close', ['class' => 'btn btn-default pull-left', 'data-dismiss' => "modal"]) .
                          Html::a('Create More', ['create'], ['class' => 'btn btn-primary', 'role' => 'modal-remote'])

                  ];
      } else {
        var_dump('save fail');
        var_dump( $model->errors);
  } 

Upvotes: 1

Rajesh Pradhan
Rajesh Pradhan

Reputation: 210

do like this

<?php
if ($model->load($request->post()) {
  $model->bundle_numbers = implode(",", $model->bundle_numbers);
  $model->save();
  return //wherever you want return
}

Upvotes: 0

Exprator
Exprator

Reputation: 27503

public function beforeSave($insert){
if (parent::beforeSave($insert)) {
         $this->bundle_numbers = implode(",", $this->bundle_numbers);
        return $this->bundle_numbers;
    } else {
        return false;
    }
}

try this

Upvotes: 2

Related Questions