将数据传递给包含的文件不起作用(php)

时间:2015-12-26 06:03:23

标签: php templates scope

在我的示例mvc项目中,我有一个包含视图文件的渲染函数 有时在我的控制器中我想通过成功或错误按摩来查看表格(来自控制器)
渲染功能:

  public function render($view)
{
    include 'view/'.$view.'.php';
}

控制器:

   public function sendguide()
{
    if(isset($_POST['submit']))
    {
        $success='ur massage posted successfully '; 
        $this->render('sendguide');
    }
    else
    $this->render('sendguide');
}

这是我在以下位置打印成功消息的视图的一部分:

<tr>
    <td align="right"> &nbsp
    <input  name='submit' type='submit' value='ثبت دزخواست'  ><?php echo $success; ?>

    </tr>

似乎当我设置$success并将其发送到我的视图时,视图必须打印 成功的消息,但它没有工作!
我错过了什么?
tnx

1 个答案:

答案 0 :(得分:1)

当前脚本中的变量可以在包含的文件中访问(假设它们在包含之前分配)。

但是在您的示例中,您的$success函数无法访问render()变量,因此您无法使用该函数中包含的脚本。

PHP文档准确描述了变量范围的问题;

http://php.net/manual/en/language.variables.scope.php

您可以将$ success变量作为参数传递给render()函数;

  public function render($view, $success='')
{
    include 'view/'.$view.'.php';
}

我添加了$success=''作为参数。 =''表示如果未提供任何值,则默认为空字符串。

$success传递给函数调用中的函数;

  public function sendguide()
{
    if(isset($_POST['submit']))
    {
        $success='ur massage posted successfully '; 
        $this->render('sendguide', $success);
    }
    else
    $this->render('sendguide');
}

作为旁注:我将为$success分配一个布尔值(true / false)以传递给函数以定义成功或失败。然后在您的视图文件中,您可以检查成功:if($success) echo...向用户发送适当的消息,而不是在脚本的$success变量中传递消息(String)。