gpt4 book ai didi

php - 如何在 Codeigniter 的 View 范围内取消设置变量

转载 作者:行者123 更新时间:2023-12-02 06:02:06 24 4
gpt4 key购买 nike

在我看来,我测试了 if (isset($winner))。但是,该 View 在循环中重新打印,我无法为后续测试清除它。

我如何实例化一个新 View 或清除/取消设置它的 Controller 给定的变量?

我很欣赏 View 具有广泛的范围,但这似乎是 Codeigniter 中的一个错误。

Controller :

for($i=0; $i < 100; $i++) {
$test = $this->prizedistributor->isWinner();
echo $this->load->view("simulateResponse", $test, TRUE);
unset($test['winner']); // this does not work
}

查看:

<? if (isset($winner)):?>
WINNER!
<? else: ?>
LOST!
<? endif; ?>
<?php unset($winner); // this does not work! ?>

结果:

假设 $i==40 是唯一的赢家,View 将报告所有 $i > 40 为赢家,尽管 Controller 始终将 bool 值默认为 false。

更新

我知道测试 if(empty($test)) 允许 View 正确报告。但是,我的问题是如何取消设置该变量(并将其从内存中清除)。这个问题很大程度上源于使用 HMVC (modular codeigniter) 时的其他类似问题。但是,在此处发布该代码太复杂,无法说明相同的范围问题。


很多人一直在质疑上面不相关的奖品分发者。所以这里有一个更简单的代码示例来说明示例问题:

Controller

function testScope() {
for($i=0; $i < 10; $i++) {
if($i == 5)$winner = array('winner' => true);
else $winner = array();
echo $this->load->view("testScope", $winner, TRUE);
}
}

查看

<?= (isset($winner))  ? "WINNER!<br>" : "LOST!<br>"; ?>

输出

迷路了!丢失的!丢失的!丢失的!丢失的!优胜者!优胜者!优胜者!优胜者!赢家!

可能的答案:

我查看了 codeigniter 的 system/core/Loader.php 并发现函数 _ci_load 缓存了第 800 行附近的变量。他们的推理是:

You can either set variables using the dedicated $this->load_vars() function or via the second parameter of this function. We'll merge the two types and cache them so that views that are embedded within other views can have access to these variables.

这提出了一个非常好的观点,我对 codeigniter 很欣赏。但问题仍然存在,我们如何才能同时拥有这两者? 可能是第 4 个可选参数来跳过此捕获?

例如。 loader->view("testScope", $winner, TRUE, FALSE); ????

最佳答案

使用 TRUE/FALSE 可能比 isset 效果更好。

此外,您在发布的代码中加载 View 的方式不会将名为 $winner 的变量发送到 View ,除非 isWinner() 返回某些内容像 array('winner' => 'someval') 可能就是这种情况。

TRUE/FALSE 可能看起来像

for($i=0; $i < 100; $i++) {
$test = $this->prizedistributor->isWinner();//isWinner() returns either array('winner' => '') or array('winner' => 'somevalue')
echo $this->load->view("test_view", $winner, TRUE);
}

查看

<?php if ($winner):?>
WINNER!<br>
<?php else: ?>
LOST!<br>
<?php endif; ?>

例子

for($i=0; $i < 100; $i++) {
if($i == 50){
$winner = array('winner' => 123);
}else{
$winner = array('winner' => '');
}
echo $this->load->view("test_view", $winner, TRUE);
}

打印

...
LOST!
LOST!
LOST!
LOST!
LOST!
LOST!
WINNER!
LOST!
LOST!
LOST!
LOST!
LOST!
LOST!
...

如果您包括 isWinner() 中发生的事情或至少提及它返回的内容,可能有助于获得更好的答案。

关于php - 如何在 Codeigniter 的 View 范围内取消设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com