Yii框架中的php foreach问题

Yii框架中的php foreach问题,php,memory,yii,foreach,Php,Memory,Yii,Foreach,我正在尝试将多语言行为整合到我的Yii演示项目“Trackstar”中。模型“project”是为测试这种多语言行为而设置的 当我尝试创建一个新项目时,我遇到了一个PHP致命错误:在中超过了30秒的最大执行时间(几个不同的PHP脚本) 调试此eror时,在/models/behaviors/multilingalbehavior.php行298: foreach ($this->languages as $l) { //$this->languages=array('en','lt'

我正在尝试将多语言行为整合到我的Yii演示项目“Trackstar”中。模型“project”是为测试这种多语言行为而设置的

当我尝试创建一个新项目时,我遇到了一个PHP致命错误:在中超过了30秒的最大执行时间(几个不同的PHP脚本)

调试此eror时,在
/models/behaviors/multilingalbehavior.php行298:

foreach ($this->languages as $l) { //$this->languages=array('en','lt');

var_dump($l) outputs very long list of 
s`tring(2) "en" string(2) "lt" string(2) "en" string(2) "lt" string(2) "en" string(2) "lt" string(2) "en" string(2) "lt" string(2) "en" string(2) "lt" string(2) "en" string(2) "lt" string(2) "en" string(2) "lt" string(2) "en" string(2) "lt"`
我使用的是MAMP,php版本5.4.10

更多信息:

model/Project.php中的行为方法

public function behaviors() {
    return array(
        'ml' => array(
            'class' => 'application.models.behaviours.MultilingualBehavior',
            'langClassName' => 'Project',
            'langTableName' => 'tbl_projectLang',
            'langForeignKey' => 'project_id',
            'langField' => 'lang_id',
            'localizedAttributes' => array('name', 'description'), //attributes of the model to be translated
            'localizedPrefix' => 'l_',
            'languages' => array('en','lt'),
            'defaultLanguage' => 'en',
            'createScenario' => 'insert',
            //'localizedRelation' => 'i18nPost',
            'multilangRelation' => 'multilangProject',
            'forceOverwrite' => true,
            //'forceDelete' => true, 
            //'dynamicLangClass' => true, //Set to true if you don't want to create a 'PostLang.php' in your models folder
        ),
    );
}
/模型/行为/多语言行为.php 方法附件:

public function attach($owner) {
        parent::attach($owner);
        $owner_classname = get_class($owner);
        $table_name_chunks = explode('.', $owner->tableName());
        $simple_table_name = str_replace(array('{{', '}}'), '', array_pop($table_name_chunks));

        if (!isset($this->langClassName)) {
            $this->langClassName = $owner_classname . 'Lang';
        }
        if (!isset($this->langTableName)) {
            $this->langTableName = $simple_table_name . 'Lang';
        }
        if (!isset($this->localizedRelation)) {
            $this->localizedRelation = 'i18n' . $owner_classname;
        }
        if (!isset($this->multilangRelation)) {
            $this->multilangRelation = 'multilang' . $owner_classname;
        }
        if (!isset($this->langForeignKey)) {
            $this->langForeignKey = $simple_table_name . '_id';
        }
        if ($this->dynamicLangClass) {
            $this->createLangClass();
        }
        if (array_values($this->languages) !== $this->languages) { //associative array
            $this->languages = array_keys($this->languages);
        }
        $class = CActiveRecord::HAS_MANY;
        $this->createLocalizedRelation($owner, Yii::app()->language);
        $owner->getMetaData()->relations[$this->multilangRelation] = new $class($this->multilangRelation, $this->langClassName, $this->langForeignKey, array('index' => $this->langField));
        $rules = $owner->rules();
        $validators = $owner->getValidatorList();
        foreach ($this->languages as $l) {
            foreach($this->localizedAttributes as &$attr) {
                foreach($rules as $rule) {
                    $rule_attributes = array_map('trim', explode(',', $rule[0]));
                    if(in_array($attr, $rule_attributes)) {
                        if ($rule[1] !== 'required' || $this->forceOverwrite) {
                            $validators->add(CValidator::createValidator($rule[1], $owner, $attr . '_' . $l, array_slice($rule, 2)));
                        }
                        else if($rule[1] === 'required') {
                            //We add a safe rule in case the attribute has only a 'required' validation rule assigned
                            //and forceOverWrite == false
                            $validators->add(CValidator::createValidator('safe', $owner, $attr . '_' . $l, array_slice($rule, 2)));
                        }
                    }
                }
            } 
        } 
    }
我自己解决了。我的错误是

'langClassName'=>'Project',
在/models/Project.php中

public function behaviors() {
    return array(
        'ml' => array(
            'class' => 'application.models.behaviours.MultilingualBehavior',
            'langClassName' => 'Project',
            'langTableName' => 'tbl_projectLang',
            'langForeignKey' => 'project_id',
            'langField' => 'lang_id',
            'localizedAttributes' => array('name', 'description'), //attributes of the model to be translated
            'localizedPrefix' => 'l_',
            'languages' => array('en','lt'),
            'defaultLanguage' => 'en',
            'createScenario' => 'insert',
            //'localizedRelation' => 'i18nPost',
            'multilangRelation' => 'multilangProject',
            'forceOverwrite' => true,
            //'forceDelete' => true, 
            //'dynamicLangClass' => true, //Set to true if you don't want to create a 'PostLang.php' in your models folder
        ),
    );
}

这使得项目类实例的递归调用+调用项目类的多语言行为类等等。将“langClassName”=>“Project”更改为“langClassName”=>“ProjectLang”,出现错误。在数据库中找不到活动记录类“ProjectLang”的表“{tbl_ProjectLang}}”。在/config/main.php数据库组件中添加了'tablePrefix'=>'tbl_',似乎一切正常。

请显示更多代码。提供的代码与结果不匹配。这当然不是内存问题(你从哪里得到这个想法的?)。你的循环永远不会结束。我怀疑“langClassName”=>“Project”,改为“langClassName”=>“ProjectLang”。在数据库中找不到活动记录类“projectLang”的表“{tbl_projectLang}}”,出现错误。“我已创建了此表,行为方法具有'langTableName'=>'tbl_projectLang',