【问题标题】:Common constants file for PHP and JavaScriptPHP 和 JavaScript 的通用常量文件
【发布时间】:2010-05-06 13:02:33
【问题描述】:

大家如何建议在 PHP 和 JavaScript 之间共享一个常量文件,以免重复代码? XML 文件?我假设在 PHP 中混合 javascipt 不是正确的解决方案!?谢谢

【问题讨论】:

标签: php javascript constants


【解决方案1】:

http://php.net/manual/en/book.json.php

我会说使用 json。它是 javascript 原生的,并且有一个用于 php 的解析器库。

考虑以下几点:

json:

{constants : { var1 : "value 1", var2 : "value 2", var3 : "value 3"}}

然后读入php:

$const = json_decode(json_string);

这会为您提供对象 $const,其属性如 $const->{'var1'} 返回“值 1”。

在 JavaScript 中是:

var const = eval(json_string);

并且会给你 const.constants.var1 == "value 1"。

js 最简单的实际实现是:

<script type="text/javascript" src="json_constants_file.js"></script>

添加 html 输出后,您会立即拥有一个以其他对象为子对象的常量对象。

【讨论】:

  • +1 似乎是最简单的解决方案。 @OP:在 Javascript 方面,您可以单独加载常量,或者(因为这看起来很浪费)有一个构建过程,将它们预先挂在您的 Javascript 文件中(前面是 var constants = ,然后是 ; 来制作表达工作)。
  • 为了确保我理解,我会首先在 PHP 中使用 file_get_contents 读取常量文件,然后在脚本标签中执行 var constants = "the result string" ?
  • 我是否必须在我网站上的每个 php 文件中都这样做?
  • 实际上,您可以将 json 文件延迟加载为 javascript,如果您需要的话,只需直接使用对象即可。我可能只是创建一个用于加载常量的 php 文件并将其包含在我需要的地方。
【解决方案2】:

你可以试试我的方法。我已经创建了一个通用的配置文件来与 php 和 js 文件一起使用。

看看这个技巧:

PHP 类配置文件:

<?php
/** Class Start **/
class Config {    
    /********************************/
    /* Page Config Info */
    /********************************/
    // page title
    const PAGE_TITLE = 'Welcome in Code Era!';  
    // base url 
    const BASE_URL = 'http://www.myapp.com/';  
    /********************************/
    /* Database Config Info */
    /********************************/
    // mysql host server
    const SERVER = '10.102.23.141';
    // database user name
    const USER = 'root';
    // database password
    const PASSWORD = '';
    // mysql database name
    const DATABASE = 'sample';
    /********************************/
    /* Share Message */
    /********************************/
    // Facebook Share Message
    const FB_SHARE_MESSAGE = 'This gonna my share message'; 
    // Facebook Share Title 
    const FB_SHARE_TITLE = 'This gonna my share title';      
    // Facebook Share Caption
    const FB_SHARE_CAPTION = 'This gonna my share caption';      
}
/** Class End **/
?>

JavaScript 文件:

// global config var
var config = {} || '' || null;
/**
 * Get Config data with Ajax Response Data
 * custom ajax method
 * return ajax response and use/store as javascript var
 * extend jQuery Ajax and change it
 * @param qs -> query string {q:value}
 * @returns result mix|multitype
 */
$.extend({
    getConfig : function (qs) {
        var result = null;
        $.ajax({
            url : 'GetConfig.php',
            type : 'POST',
            data : qs,
            dataType : "json",
            async : false,
            success : function (data) {
                result = data;
            },
            error : function ajaxError(jqXHR, exception) {
                if (jqXHR.status === 0) {
                    alert('Not connected.\nVerify your network.');
                } else if (jqXHR.status === 404) {
                    alert('The requested page not found. [404]');
                } else if (jqXHR.status === 500) {
                    alert('Internal Server Error [500].');
                } else if (exception === 'parsererror') {
                    alert('Requested JSON parse failed.');
                } else if (exception === 'timeout') {
                    alert('Time out error.');
                } else if (exception === 'abort') {
                    alert('Ajax request aborted.');
                } else {
                    alert('Uncaught Error.\n' + jqXHR.responseText);
                }
            }
        });
        return result;
    }
});

// Collect all Class Constant data on page load
var CONFIG = (function() {
    var private = $.getConfig({config_item : ''});
    return {
       get: function(name) { return private.data[name]; }
   };
})();

/**
 * Facebook Share Content example code
 * with using class constant
 */
function fbShare() {
    var feed = {
        method : 'feed',        
        link : CONFIG.get('BASE_URL'),
        name : CONFIG.get('FB_SHARE_TITLE'),        
        caption : CONFIG.get('FB_SHARE_CAPTION')
    };
    function callback(response) {
        if (response && response.post_id !== undefined) {
            alert('Thank you for sharing the content.');
        }
    }
    FB.ui(feed, callback);
}

如何在 JavaScript 中使用:

var fbShareMessage = CONFIG.get('FB_SHARE_MESSAGE');

不带CONFIG.get函数示例:

var fbShareMessage = $.getConfig({config_item : 'FB_SHARE_MESSAGE'}).data;

GetConfig.php 文件的 PHP 代码:

<?php
/**
 *  Get Config php file
 *  request a config item from javascript/ajax
 *  return json data
 */
// check request with ajax only
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    exit;
}
// include class config
require_once '../class/class.config.php';
// get all constant from class config
$configConstant = new ReflectionClass('Config');
// store as array in var
$configConstantArray = ($configConstant->getConstants());
// safe and private request item
$black_list_constant = 'SERVER|USER|PASSWORD|DATABASE';
$black_list_object = explode('|',$black_list_constant);
// make return jason format
$result = array();
// get action from ajax
$action = $_POST['config_item'];
switch ($action) {
    case '':
    $result["status"]= TRUE;    
    foreach ($black_list_object as $index => $value){       
        if(array_key_exists($value, $configConstantArray)){
            unset($configConstantArray["$value"]);                  
        }       
    }
    $result["data"]= $configConstantArray;
    $result["msg"]= 'Response 200 OK';
    echo json_encode($result);
    break;
    default:
    // check valid action
    if(array_key_exists($action,$configConstantArray) && in_array($action,$black_list_object)){
        $result["status"]= FALSE;
        $result["data"]= null;
        $result["msg"]= 'Response 201 FAIL';
        echo json_encode($result);
    }else{
        $result["status"]= TRUE;
        $result["data"]= $configConstantArray["$action"];
        $result["msg"]= 'Response 200 OK';
        echo json_encode($result);
    }
    break;
}

就是这样。希望对某人有所帮助:)

【讨论】:

    【解决方案3】:

    PHP 和 JavaScript 共享的配置变量可以很容易地存储为 XML,是的。不过,JSON 可能是一个更好的解决方案,因为它只需要很少的解析工作 - JS 原生处理它,而 PHP 将其转换为带有 json_decode 的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2012-03-30
      • 1970-01-01
      • 2014-03-17
      • 2011-05-17
      相关资源
      最近更新 更多