Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我被迫从视图中调用控制器方法,如何重构代码?_Php_Model View Controller_Codeigniter_Model_Controller - Fatal编程技术网

Php 我被迫从视图中调用控制器方法,如何重构代码?

Php 我被迫从视图中调用控制器方法,如何重构代码?,php,model-view-controller,codeigniter,model,controller,Php,Model View Controller,Codeigniter,Model,Controller,好吧,我在和CodeIgniter合作。php是我显示所有帖子的视图,每个帖子都必须显示其相应的评论,这就是我试图实现的目标 我的模型中有一个方法,它接受postid$postid并返回其相应的comment$comment,除非我通过一个controller方法调用模型方法,否则我如何实现这一点 我的看法是: <body> <?php foreach ($post as $key):?> <div class="container">

好吧,我在和CodeIgniter合作。php是我显示所有帖子的视图,每个帖子都必须显示其相应的评论,这就是我试图实现的目标

我的模型中有一个方法,它接受postid$postid并返回其相应的comment$comment,除非我通过一个controller方法调用模型方法,否则我如何实现这一点

我的看法是:

<body>
    <?php foreach ($post as $key):?>
    <div class="container">
        <div class="span10">

        <div id="box" class="alert-message block-message info">
            <div id="post" class="post">
                <?php echo $key->content;?><br />
            </div>
            <div>
            <p><?php //echo $comment;?></p> <!--HERE THE COMMENTS OF THE CORRESPONDNING POST MUST BE ECHOED-->
            </div>
            <div>
            <a href="#" id="commentnow<?php echo $key->postid;?>"><p><em>Comment</em></p></a>
            </div>
            <div id="commentarea<?php echo $key->postid;?>">
            <?php $name=array('name'=>"form$key->postid");
                  echo form_open("/welcome/comments/$key->postid",$name);
                  $data=array(
                                'id' => 'input',
                                'name'=> 'content',
                                'rows' => '2',
                                'placeholder' => "Write a comment...",
                                'autofocus' => 'TRUE'             
                      );
                  echo form_textarea($data);    

            ?>
            <a href="JAVASCRIPT:form<?=$key->postid;?>.submit()" id="cbtn" class="btn primary small">Comment</a>
            <?=form_close();?>
            </div>
        </div>
    </div>

    </div>
    </div>
    <script type="text/javascript">
    $(function(){
    $("div#commentarea<?=$key->postid;?>").hide(); 
    $('a#commentnow<?=$key->postid;?>').click(function(){

        $("div#commentarea<?=$key->postid;?>").slideToggle(250);
        }); 
    });

    </script>
    <?php endforeach;?>
    </body>

我是新手,如果我的代码不好请原谅。我一直期待着改进我的代码>感谢您的耐心:

看看你的代码,我觉得你还没有完全理解如何使用MVC

首先,controller方法comments包含注释提取和向帖子添加注释。查看视图文件时,这似乎不符合逻辑

相反,你应该把它们分开

在控制器中,添加另一个名为“post_comment”的metod,并将添加注释功能移动到该方法,然后添加重定向:

public function post_comment($postid)
{

    //Post Comment
    $comment=$this->input->post('content');
    $data=array('content'=>$comment,'comment_postid'=>$postid);
    $this->comments->postcomment($data);

    redirect('welcome/comments'); //redirect back to comments
}
现在,从控制器中的comment方法中删除添加注释,以便仅检索注释:

public function comments($postid)
{

    //Retrieve
    $comments['comment']=$this->comments->retrieve($postid);
    $this->load->view('posts',$comments);
}
最后更改视图文件-您需要将注释发布到新的URL:

        <?php $name=array('name'=>"form$key->postid");
              echo form_open("/welcome/post_comment/$key->postid",$name);

这应该可以解决问题。

?当您传递帖子时,将它们传递到视图,看不到问题所在。请说得更清楚些,具体说明问题所在。对不起。我编辑它是为了让它更清晰。回答你的标题问题。从CI中的视图调用控制器是不可能的。它不是为了那样工作而建的。就像@DamienPirsy所说的,将注释加载到控制器中并将其传递给视图。
        <?php $name=array('name'=>"form$key->postid");
              echo form_open("/welcome/post_comment/$key->postid",$name);