首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

thinkphp的有关问题弄了半天了,还是不知道,各位大神帮忙看看吧

2013-09-25 
thinkphp的问题弄了半天了,还是不知道,各位大神帮忙看看吧控制器中的代码:public function testt(){//$tit

thinkphp的问题弄了半天了,还是不知道,各位大神帮忙看看吧
控制器中的代码:
public function testt(){
//$title="练习册";
//$content='<br>'.$_GET['name'];
//$this->assign('title',$title);
$User = M('name');
$list = $User->select();
$this->assign('list',$list);
$this->assign("title","SMARTY测试");
$this->display();
}
模板中的代码:
{$title}<br />
<hr />
<foreach name="list" item="vo">
{$vo.age}{$vo.name}<hr />
</foreach>
重要去掉foreach部分就正常,否则就会出显这样
syntax error, unexpected ')', expecting T_VARIABLE or '$' D:\AppServ\www\App\admin\Runtime\Cache\6e178638460c8ba2282739c247c2ce14.php 第 10 行.

cache文件中的代码为:
<body>
<?php echo ($title); ?><br />
<hr />
<?php if(is_array($)): foreach($ as $key=>$): echo ($vo["age"]); echo ($vo["name"]); ?><hr /><?php endforeach; endif; ?>
</body>
看来好久也没有头绪,怎么办啊?
thinkphp foreach
[解决办法]
list是空 你自己在检查下
[解决办法]

public function _foreach($attr,$content) {
        static $_iterateParseCache = array();
        //如果已经解析过,则直接返回变量值
        $cacheIterateId = md5($attr.$content);
        if(isset($_iterateParseCache[$cacheIterateId]))
            return $_iterateParseCache[$cacheIterateId];
        $tag        =   $this->parseXmlAttr($attr,'foreach');
        $name       =   $tag['name'];
        $item       =   $tag['item'];
        $key        =   !empty($tag['key'])?$tag['key']:'key';


        $name       =   $this->autoBuildVar($name);
        $parseStr   =   '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>';
        $parseStr  .=   $this->tpl->parse($content);
        $parseStr  .=   '<?php endforeach; endif; ?>';
        $_iterateParseCache[$cacheIterateId] = $parseStr;
        if(!empty($parseStr)) {
            return $parseStr;
        }
        return ;
    }


稍微查了下解析foreach标签的源码,这个并不是list变量为空,其实是没取到标签里name和item的值,具体原因楼主可以自己去查源码排除下,当然最简单的解决办法就是改用volist标签。
[解决办法]
你模板中的foreach应该写成{foreach name='' item=''}吧?
[解决办法]
引用:
怎么办啊,我写的都是最简单的几句代码,
结果在源码里测就是parseXmlAttr函数里面出的问题。可是会是源码的问题么

public function parseXmlAttr($attr,$tag) {
        //XML解析安全过滤
        $attr   =   str_replace('&','___', $attr);
        $xml    =   '<tpl><tag '.$attr.' /></tpl>';
        $xml    =   simplexml_load_string($xml);
        if(!$xml) {
            throw_exception(L('_XML_TAG_ERROR_').' : '.$attr);
        }
        $xml    =   (array)($xml->tag->attributes());
        $array  =   array_change_key_case($xml['@attributes']);
        if($array) {
            $attrs  = explode(',',$this->tags[strtolower($tag)]['attr']);
            if(isset($this->tags[strtolower($tag)]['must'])){


                $must   =   explode(',',$this->tags[strtolower($tag)]['must']);
            }else{
                $must   =   array();
            }
            foreach($attrs as $name) {
                if( isset($array[$name])) {
                    $array[$name] = str_replace('___','&',$array[$name]);
                }elseif(false !== array_search($name,$must)){
                    throw_exception(L('_PARAM_ERROR_').':'.$name);
                }
            }
            return $array;
        }
    }


再顺着查一下源码不就好了么,不清楚的变量就打印一下,很容易就能找出问题来,源码有错误也不是什么稀奇的事,也可能是书写格式不对。
[解决办法]
上面说过了,list数组里的值并没有变化,只是在处理模版时没有正确的生成php代码罢了,我刚才下载了一个thinkphp,用楼主的代码试了下,结果是正常的,建议去thinkphp官网上重新下个最新版的看看

热点排行