簡體   English   中英

在Java中實現PHP常量的最佳方法

[英]Best way to implement PHP constants in Javascript

因此,我正在使用Codeignitor,並且試圖找出以一種可維護的巧妙方式與我的JavaScript共享常量的最佳方法。

1)在視圖中,我可以像頁腳(yuuuck!)那樣呼出變量。2)我可以解析包含javascript模板的局部視圖,並在視圖中注入(也許?)3)我可以動態創建一個像myJavascript.js.php這樣的javascript文件,並將其包含在我的標頭中。

在MVC框架中將PHP實現到JS的最佳可維護方法是什么?

為了使變量保持良好的包裝狀態,我使用了JSON對象-這樣,我就不會出現編碼,斜杠等問題,而不必手動更新每個添加的JavaScript 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;
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM