Yii::import 似乎有时无法加载

  • operating system:windows7

  • Web server:xampp

  • browser type:ie,ff

  • Yii version ,1.1.12

下面的代码比较多,只是为了提供完整的环境信息,调用流程并不复杂,希望帮助查看解决。谢谢。

问题概要:

代码1函数中 如果取消注释 import Stock,则整个过程执行正常符合预期。


如果注释掉 import Stock 则整个过程执行异常。在代码3处无法调用 Stock 的静态方法


但代码3 开始就 import 了 Stock。。。。 

代码1:下面的代码通过 ajax 调用




    public function actionCheck2() {

        Yii::import('application.modules.stock.models.Alert');

        //Yii::import('application.modules.stock.models.Stock'); //这里如果注释掉程序异常

        $transaction = Yii::app()->db->beginTransaction();

        try {

            if (!$this->_check(2)) {

                throw new Exception();

            }

            $this->plan2record(); // 确认入库

            Alert::check(); // 产品入库后要更新报警状态

            $transaction->commit();

            echo json_encode(array('type' => 'flash-success', 'msg' => '操作成功!'));

        } catch (Exception $e) {

            echo json_encode(array('type' => 'flash-error', 'msg' => '操作错误!')); // 审批

            $transaction->rollback();

        }

    }



代码2:Alert::check 部分代码




    public static function check() {

        Yii::import('application.modules.stock.models.Stock');

        $pid = Yii::app()->user->pid;

        // 取出此项目所有 打开的报警器

        $models = self::model()->findAllByAttributes(array('pid' => $pid, 'active' => 1));

        foreach ($models as $model) {

            $name = $model->name;

            $value = unserialize($model->value);

            $result = $model->$name($value);

            // 这里不用重置 报警状态,因为在一个肯定回滚的事务内。无法保存。

            // 经过分析 这里可以保存:在事务内时,不会保存。

            // 当进行正常出库后,事务外执行,则更新并保存了 报警的状态。

            $model->state = $result;

            $model->save();

            if ($result == 3)  // 有任何一个 达到限制 则返回

                return "【警报】" . $value['text'] . " 受限";

        }

        return true;

    }



代码3:上面:$result = $model->$name($value); 会调用下面的代码:

问题:这里的Stock::ssum();调用失败,不执行,Stock::ssum() 又其他过程调用没有问题。




    public function goods_amount($value) {

        Yii::import('application.modules.stock.models.Stock');

        $test1 = Stock::test1();

        $test2 = 3;

        $stock = Stock::ssum($value['gid']);

        if($stock > $value['v1']) return 0;

        else if(($stock > $value['v2'])) return 1;

        else if(($stock > $value['v3'])) return 2;

        else return 3;

    }