用Javascript实现PHP常量的最佳方式

Best way to implement PHP constants in Javascript

本文关键字:最佳 方式 常量 PHP Javascript 实现      更新时间:2023-09-26

因此,我正在使用Codeignator,并试图找出以一种整洁可维护的方式与javascript共享常量的最佳方式。

1) 在视图中,我可以像我的页脚一样回显我的变量(yuuuck!)2) 我可以解析一个包含javascript模板的部分视图,并将其注入到我的视图中(也许?)3) 我可以动态创建一个类似myJavascript.js.php的javascript文件,并将其包含在我的头中。

在MVC框架中将PHP实现为JS的最佳可维护方式是什么?

为了让我的变量包装得很好,我使用了一个JSON对象,这样我就不会遇到编码、斜杠、必须手动更新JavaScript的问题。。。

$variables_to_view['js_variables']['var_name'] = $var_name;

然后将其传递给视图

php_variables = <?php echo json_encode($js_variables) ?>;
alert(php_variables.var_name);

在script标记中回显变量似乎没有任何错误。事实上,像BackboneJS这样的框架鼓励您为需要传递给客户端代码的数据这样做。

您可以使用这样的短标签:

例如:如果你想在js中使用$abc变量,那么你需要在js 中写这个

var abc = <?=$abc?>;

您可以创建php文件。类似script.js.php的东西?outfor=1;

 <?php
  header("Content-type:text/javascript"); //can be application/javascript.
 ?>
 ABC = <?php echo $abc?>
 CBA = <?php echo $cba?>
 BAC = <?php echo $bac?> //and so on.

一些附加信息。如果在函数中使用"var",则该变量将仅在该函数中可见,没有"var"表示全局。

所以。

function abc() 
{
  var a = 1; //only in abc()
  b=2;  //global
}

我知道就编程技能而言,它不是最好的,但最终它是我使用的,并且正在发挥作用。简而言之:我把所有常量都放在一个xml文件中,我有一个小脚本,它生成两个内容相同但语法不同的独立文件。我只是用我的值粘贴代码。如果它对任何人有用,我会很乐意提供帮助。xml是最简单的;值

<?php
define("GECOXML_PATH","../xml/geco.xml");
define("PHP_GECO_FN","../.includes/geco.php");
define("JS_GECO_FN","../js/geco.js");
echo "********   GECO (GEnerate COnstants files for PHP and JS) **********<br>";
echo "<br>";
echo "         input xml file: ". GECOXML_PATH."<br>";
echo "         output php file: ". PHP_GECO_FN."<br>";
echo "         output js file: ". JS_GECO_FN."<br>";
echo "********************************************************************<br>";
$geco = (object)xmlParse(GECOXML_PATH);
echo "<br>";
echo "<br>";
echo "************ PHP GECO ************* <br>";
echo "<br>";
$PHP =  gecoPHP($geco);
echo "<br>";
echo "<br>";
echo "************** JS GECO ************<br>";
echo "<br>";
$JS = gecoJS($geco);
writeFiles($PHP, $JS);
//****** Functions *********
function xmlParse ($url) {
        $fileContents= file_get_contents($url);
        $fileContents = str_replace(array("'n", "'r", "'t"), '', $fileContents);
        $fileContents = trim(str_replace('"', "'", $fileContents));
        return simplexml_load_string($fileContents);
    }
function writeFiles($PHPcontent, $JScontent)
{
            echo "<br> PhP ok:". file_put_contents(PHP_GECO_FN, $PHPcontent)  . "<br>";
            echo "<br> JS ok:" . file_put_contents(JS_GECO_FN, $JScontent) . "<br>";
}
function gecoPHP($gecoOBJ)
{
    foreach ($gecoOBJ as $key => $value)
    {
        if (is_numeric(str_replace(" ","",$value)))
            {
                $line = "define('"" . $key . "'",". intval($value) .  ");'n";
            }
            else
            {
                $line = "define('"" . $key . "'",'"". $value .  "'");'n";
            }
        $phpContent = $phpContent . $line;
     echo $line."<br>";
    }
   return "<?php'n"$phpContent."?>";
}
function gecoJS($gecoOBJ)
{
    foreach ($gecoOBJ as $key => $value)
    {
        if (is_numeric(str_replace(" ","",$value)))
            {
                $line = "var " . $key . "=". $value . ";'n";
            }
            else
            {
                $line = "var " . $key . "='"". $value . "'";'n";
            }
        $JSContent =  $JSContent . $line;
    echo $line."<br>";
    }
   return $JSContent;
}
?>