【问题标题】:Variables undefined when requiring view by parent controller需要父控制器查看时未定义的变量
【发布时间】:2015-07-29 22:54:58
【问题描述】:

我正在使用控制器和视图(无框架),并且在需要来自父控制器的视图时遇到问题,这会导致变量未定义。

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

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->view('mypage'); 行在需要使用变量的 mypage 视图 (mypage.php) 的父 Controller 中启动视图方法。问题是 mypage.php 中的所有变量都未定义。

如果我与

交换那条线
require_once "./app/views/mypage.php";    

,然后就可以了。那么为什么我在向控制器请求时会丢失变量,我做错了什么?

【问题讨论】:

  • 您需要在用户类页面中使用控制器类吗?
  • 在用户类中,我有一个自动加载器: spl_autoload_register(function($class) { require_once "./app/controllers/" . ($class) . ".php"; });跨度>

标签: php model-view-controller undefined controllers


【解决方案1】:

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

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

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

【讨论】:

  • 我想这是一个范围问题,但我该如何让它发挥作用?还是让控制器需要视图是不必要的?
  • @Galivan :您需要找到一种方法将您的值传递给视图脚本。例如,您可以在 Controller 中使用关联数组或 stdClass 对象,其中键是变量名称(和值......值)并将其作为第二个参数传递给 $this->view(...) 方法。然后在view() 函数中使用extract 函数。不要忘记添加适当的转义!
  • 好的,我明白了!但这似乎是一个不必要的弯路。我只是想让事情变得更有效,我还在学习。也许我只会使用用户类中的“require”。
  • @Galivan :如果您尝试探索 MVC 模式,则必须创建一些代表您的视图的东西。这可以是一个 View 对象,它将保存您需要显示的值。请看我找到的这个例子:salopek.eu/content/28/create-a-simple-php-mvc-framework
  • 感谢您的链接。我目前没有使用“模型”(虽然我有一个),也许那是缺失的部分。我看过很多教程,但还没有看到很多关于显示网页和一些变量的过程的例子。但我会看一下链接。
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
相关资源
最近更新 更多