WeSee
WeSee

Reputation: 3762

Yii2: Global variable in view

I'm need to concatenate lines for later output (markdown processing...). This is why I use a function l() and a global variable $content.

My view code:

$content = "";
function l($line="") {
    global $content;
    $content .= $line."\n";
}
l("hello");
echo "+";
echo $content;
echo "-";

outputs

+-

I'd expect:

+Hello-

Why? What am I doing wrong?

I am using PHP 7.2.6

EDIT:

There are several PHP related answers as this one. But they don't help. I suppose the problem is related to Yii2 and more specific to Yii2 view handling.

Upvotes: 0

Views: 1035

Answers (1)

WeSee
WeSee

Reputation: 3762

Found the solution! Crazy!

Yii2 renders the view inside an object instance.

This means, the PHP variable declaration

$content = "";

is not global but local to the rendering context.

The solution for question is to make the variable declaration in the view global, too:

global $content = "";

The working code inside the view looks like this now:

global $content = "";
function l($line="") {
    global $content;
    $content .= $line."\n";
}
l("hello");
echo "+";
echo $content;
echo "-";

Bingo!

Upvotes: 2

Related Questions