在蛋糕php中没有设置从ctp文件调用函数时的值

时间:2013-03-23 12:21:27

标签: cakephp

我的authorcontroller文件

class AuthorController extends AppController {
public function author_quotes_list($author,$page="null")
    {
        $perpage=30;
        $this->commen();
        $author_data=$this->Author->query("select author.*,professions.professions_name from author,professions where author.professions_id=professions.id and author.author_name='$author' and author.status=1  ");
        $this->set('author_data',$author_data);

        //paging
        $count=$quotes_data=$this->Author->query("select count(id) from quotes where author_id=".$author_data[0]['author']['id']." and status=1");
        $limit=$this->paging($page,$count,$perpage);
        $quotes_data=$this->Author->query("select id,quotes from quotes where author_id=".$author_data[0]['author']['id']." and status=1 limit $limit,$perpage");
        //print_r($quotes_data);
        $this->set('quotes_data',$quotes_data);

    }
public function ratings($q_id)
    {
        //echo $quotes_id;
        $tuser=$this->Author->query("select count(id) from user where status=1");
        //print_r($tuser);
        if($tuser==NULL)
        {
            $this->set('tuser',0);
        }
        else
        {
            $this->set('tuser',$tuser[0][0]['count(id)']);
        }
        $vusers=$this->Author->query("select * from totalrate where quoteid=$q_id");
        print_r($vusers);

        if($vusers==NULL)   
        {
            $this->set('vuser',0);
            $this->set('trate',0);
        }
        else
        {

            $this->set('vuser',$vusers[0]['totalrate']['totaluser']);
            $this->set('trate',$vusers[0]['totalrate']['totalrate']);
        }
}

我的author_quotes_list.ctp文件

 <?php  $this->requestAction(array('controller' => 'Author', 'action' => 'ratings/'.$quotes['quotes']['id']));?>
                    <div class="star_txt">(<?php echo $trate; ?>/5,  <?php echo $vuser; ?> votes) from <?php echo $tuser; ?> Users</div>

当我调用作者控制器的评级功能时,调用此函数但不设置$ trate,$ vuser和$ tuser值的值。

3 个答案:

答案 0 :(得分:0)

我建议在if之后的控制器中 你写:debug($ tuser); 并在新行中写:debug($ vusers);

我认为这句话:$ this-&gt; set('tuser',$ tuser [0] [0] ['count(id)']);没有设置hte变量$ tuser因为我认为$ tuser [0] [0] [count(id)]不是有效的索引。 所以debug函数会显示你调试的数组的内容和索引

答案 1 :(得分:0)

我认为您可以使用更好的“CakePHP实践”。首先采取更多的OOP方法并做

if (!empty($vusers)) {

其次,如果你的模型设置正确,那么使用find()会好得多;

$this->Author->Rate->find('first', array('conditions' => ....)));

最后如上所述,而不是print_r使用cakephp命令

debug();

答案 2 :(得分:0)

首先要注意更好的CakePHP实践。另请看这个页面:http://book.cakephp.org/2.0/en/views.html

在本页中间的某处,它说: “你可以通过使用requestAction()来充分利用元素.requestAction()函数从控制器动作中获取视图变量,将它们作为数组返回。”

所以你的变量是由requestAction返回的,它们不会像你视图中的标准变量那样设置。你必须从requestAction中取回它们并从那里使用它们:

<?php $vars =  $this->requestAction(array('controller' => 'Author', 'action' => 'ratings/'.$quotes['quotes']['id']));?>
<?php echo $vars[...] ?>