dss67853 2016-05-15 18:39
浏览 94
已采纳

Phalcon BeforeSave在保存之前没有收到数据?

Before I save my model, I would like to check if $ CONT_CEDULA meets the requirements. If not, then don't save. But when saving, it is as if the variable $ CONT_CEDULA hasn't got any data. I want to know if I'm doing well or need some other event or function. Also, the echo outputs no data.

beforeSave method

public function beforeSave() {

        echo $this->$CONT_CEDULA;
        switch (strlen($this->$CONT_CEDULA)) {
        case 10:
            return validarCI($this->$CONT_CEDULA);
            break;
        case 13:
            return validarRUC($this->$CONT_CEDULA);
            break;
        default:
           echo "Numero de caracteres invalidos"  ;
            return FALSE;
    }

SpmContacto model

 <?php

class SpmContacto extends \Phalcon\Mvc\Model {

public $CONT_CODIGO;
public $CONT_CEDULA;
public $CONT_RUCIDE;
public $CONT_NOMBRE;
public $CON_ESTADO;
public $CONT_TELEFO;
public $CONT_DIRECC;
public $CONT_AREA;
public $CONT_CARGO;
public $CONT_TIPOXX;
public $CONT_EMAIL;
public $CONT_USUARIO;
public $CONT_CLAVE;
public $CONT_CLAVEE;
public $CONT_FECNACI;
public $CONT_FECINSC;
public $CONT_TIPOCODIGO;

/**
 * Initialize method for model.
 */
public function initialize() {
    $this->setSchema("SPOLS");
    $this->hasMany('CONT_CODIGO', 'SPMREFERENCIA', 'CONT_CODIGO', array('alias' => 'SPMREFERENCIA'));
    $this->hasMany('CONT_CODIGO', 'SPTDETALLE', 'CONT_CODIGO', array('alias' => 'SPTDETALLE'));
    $this->hasMany('CONT_CODIGO', 'SPTENCABEZADO', 'CONT_CODIGO', array('alias' => 'SPTENCABEZADO'));
}

function validarCI($strCedula) {
    $suma = 0;
    $strOriginal = $strCedula;
    $intProvincia = substr($strCedula, 0, 2);
    $intTercero = $strCedula[2];
    $intUltimo = $strCedula[9];
    if (!settype($strCedula, "float"))
        return FALSE;
    if ((int) $intProvincia < 1 || (int) $intProvincia > 23)
        return FALSE;
    if ((int) $intTercero == 7 || (int) $intTercero == 8)
        return FALSE;
    for ($indice = 0; $indice < 9; $indice++) {
        //echo $strOriginal[$indice],'</br>';
        switch ($indice) {
            case 0:
            case 2:
            case 4:
            case 6:
            case 8:
                $arrProducto[$indice] = $strOriginal[$indice] * 2;
                if ($arrProducto[$indice] >= 10)
                    $arrProducto[$indice] -= 9;
                //echo $arrProducto[$indice],'</br>';
                break;
            case 1:
            case 3:
            case 5:
            case 7:
                $arrProducto[$indice] = $strOriginal[$indice] * 1;
                if ($arrProducto[$indice] >= 10)
                    $arrProducto[$indice] -= 9;
                //echo $arrProducto[$indice],'</br>';
                break;
        }
    }
    foreach ($arrProducto as $indice => $producto)
        $suma += $producto;
    $residuo = $suma % 10;
    $intVerificador = $residuo == 0 ? 0 : 10 - $residuo;
    return ($intVerificador == $intUltimo ? TRUE : FALSE);
}

function validarRUC($strRUC) {
    if (strlen($strRUC) != 13)
        return FALSE;
    $suma = 0;
    $strOriginal = $strRUC;
    $intProvincia = substr($strRUC, 0, 2);
    $intTercero = $strRUC[2];
    if (!settype($strRUC, "float"))
        return FALSE;
    if ((int) $intProvincia < 1 || (int) $intProvincia > 23)
        return FALSE;
    if ((int) $intTercero != 6 && (int) $intTercero != 9) {
        if (substr($strRUC, 10, 3) == '001')
            return validarCI(substr($strRUC, 0, 10));
        return FALSE;
    }
    if ((int) $intTercero == 6) {
        $intUltimo = $strOriginal[8];
        for ($indice = 0; $indice < 9; $indice++) {
            //echo $strOriginal[$indice],'</br>';
            switch ($indice) {
                case 0:
                    $arrProducto[$indice] = $strOriginal[$indice] * 3;
                    break;
                case 1:
                    $arrProducto[$indice] = $strOriginal[$indice] * 2;
                    break;
                case 2:
                    $arrProducto[$indice] = $strOriginal[$indice] * 7;
                    break;
                case 3:
                    $arrProducto[$indice] = $strOriginal[$indice] * 6;
                    break;
                case 4:
                    $arrProducto[$indice] = $strOriginal[$indice] * 5;
                    break;
                case 5:
                    $arrProducto[$indice] = $strOriginal[$indice] * 4;
                    break;
                case 6:
                    $arrProducto[$indice] = $strOriginal[$indice] * 3;
                    break;
                case 7:
                    $arrProducto[$indice] = $strOriginal[$indice] * 2;
                    break;
                case 8:
                    $arrProducto[$indice] = 0;
                    break;
            }
        }
    } else {
        $intUltimo = $strOriginal[9];
        for ($indice = 0; $indice < 9; $indice++) {
            //echo $strOriginal[$indice],'</br>';
            switch ($indice) {
                case 0:
                    $arrProducto[$indice] = $strOriginal[$indice] * 4;
                    break;
                case 1:
                    $arrProducto[$indice] = $strOriginal[$indice] * 3;
                    break;
                case 2:
                    $arrProducto[$indice] = $strOriginal[$indice] * 2;
                    break;
                case 3:
                    $arrProducto[$indice] = $strOriginal[$indice] * 7;
                    break;
                case 4:
                    $arrProducto[$indice] = $strOriginal[$indice] * 6;
                    break;
                case 5:
                    $arrProducto[$indice] = $strOriginal[$indice] * 5;
                    break;
                case 6:
                    $arrProducto[$indice] = $strOriginal[$indice] * 4;
                    break;
                case 7:
                    $arrProducto[$indice] = $strOriginal[$indice] * 3;
                    break;
                case 8:
                    $arrProducto[$indice] = $strOriginal[$indice] * 2;
                    break;
            }
        }
    }
    foreach ($arrProducto as $indice => $producto)
        $suma += $producto;
    $residuo = $suma % 11;
    $intVerificador = $residuo == 0 ? 0 : 11 - $residuo;
    //echo "$intVerificador == $intUltimo";
    return ($intVerificador == $intUltimo ? TRUE : FALSE);
}

function validarID($strId) {
    switch (strlen($strId)) {
        case 10:
            return validarCI($strId);
            break;
        case 13:
            return validarRUC($strId);
            break;
        default:

            return FALSE;
    }
}

public function beforeSave() {

    echo $this->$CONT_CEDULA;
    switch (strlen($this->$CONT_CEDULA)) {
        case 10:
            return validarCI($this->$CONT_CEDULA);
            break;
        case 13:
            return validarRUC($this->$CONT_CEDULA);
            break;
        default:
           echo "Numero de caracteres invalidos";
         return FALSE;
    }

     //echo $op;
}

public function getSource() {
    return 'SPM_CONTACTO';
}

public static function find($parameters = null) {
    return parent::find($parameters);
}

public static function findFirst($parameters = null) {
    return parent::findFirst($parameters);
}
  • 写回答

1条回答 默认 最新

  • dongzhao1930 2016-05-17 08:23
    关注

    By default Phalcon wont output any data you "echo" in your controllers or your models. The easy 'workaround' is to die('your output');

    If you return a value in a switch, it is unnecessary to add a break; to the end of your case.

    public function beforeSave() 
    {
        // check the content of $this->$CONT_CEDULA
        var_dump($this->$CONT_CEDULA);
        die;
    
        switch (strlen($this->$CONT_CEDULA)) {
           case 10:
              return validarCI($this->$CONT_CEDULA);
           case 13:
              return validarRUC($this->$CONT_CEDULA);
           default:
             // an example to test if your code enters this case.
             die("Numero de caracteres invalidos");
             return FALSE;
       }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)