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 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型