【问题标题】:pass data to included file not working(php)将数据传递给包含的文件不起作用(php)
【发布时间】:2016-03-31 20:27:23
【问题描述】:

在我的示例 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

【问题讨论】:

  • 问题似乎是消息设置为 $success ,然后 render 函数被调用,其中将包含视图文件。但是$success 消息没有被传递给视图。
  • @SameerK 我想当我包含一个文件时 php(或 maby apache?)在我当前的文件中获取该文件的副本,你可以想象我有我的视图文件,我初始化$success 这不是真的吗?
  • @MR.masoud,你的函数render 在它自己的范围内工作。它对外部变量一无所知

标签: php templates scope


【解决方案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 分配一个布尔值(真/假)以传递给函数来定义成功或失败。然后在您的视图文件中,您可以检查是否成功:if($success) echo... 向用户发送适当的消息,而不是在脚本的 $success 变量中传递消息(字符串)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2022-10-22
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多