当需要父控制器查看时,变量未定义

时间:2015-05-18 12:24:17

标签: php model-view-controller undefined controllers

我正在使用控制器和视图(没有框架),并且需要来自父控制器的视图时出现问题,导致变量未定义。

这是一个带有视图功能的主控制器,它需要视图。

class Controller {
    public function view($view, $data =[]){                  
    require_once './app/views/' . $view . '.php';
}    

然后有一个用户控制器扩展控制器,方法是" mypage"它在变量中加载东西并需要一个视图。 (如果已登录,您可以在URL中访问Mypage。)

class User extends Controller{
    public function mypage(){
        $userdetails = $this->getuserdetails();                  
        $userstatus = $this->getstatus();                     
        $messages = new Messages();                            
        $showmessages = $messages->showMessages();            
        $friends = new Friends();                            
        $outrequests = $friends->outRequests();             
        $increquests = $friends->incRequests();          
        $friendsstatuses = $friends->friendsstatuses();
        $getfriends = $friends->friends();
        $this->view('mypage');
        }
 }     

$ this->视图(' mypage'); 启动父控制器中的视图方法,该方法需要mypage视图(mypage.php),其中使用变量。探测是mypage.php中所有变量都未定义。

如果我用

交换该行
require_once "./app/views/mypage.php";    

,然后它的工作原理。那么,为什么在需要来自Controller时我会丢失变量,以及我做错了什么?

1 个答案:

答案 0 :(得分:2)

狂野猜测,但我认为这是一个范围问题:

您在mypage()函数中定义变量,因此这些变量仅存在于此函数的范围内。 调用$this->view(...)只调用另一个有自己范围的方法(你的变量不存在)。

当您直接调用require_once(...)时,包含的视图脚本会继承当前范围内已定义的变量。