Файл общих констант для PHP и JavaScript - PullRequest
4 голосов
/ 06 мая 2010

Как, ребята, предлагают разделить файл констант между PHP и JavaScript, чтобы не повторять код? XML-файл? Я предполагаю, что смешивание javascipt внутри PHP не будет правильным решением !? Спасибо

Ответы [ 3 ]

4 голосов
/ 06 мая 2010

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 == "значение 1".

Самая простая реализация в реальном выражении для js:

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

При добавлении вывода html у вас сразу появляется объект константы с другими объектами в качестве его потомков.

0 голосов
/ 08 ноября 2013

Вы можете попробовать мой подход. Я создал общий файл конфигурации для использования с файлами 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;

PHP-код для файла GetConfig.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;
}

Вот и все. Надеюсь, это кому-нибудь поможет :) 1030 *

0 голосов
/ 06 мая 2010

Переменные конфигурации, которые будут совместно использоваться как PHP, так и JavaScript, могут быть легко сохранены как XML, да. Тем не менее, JSON может быть лучшим решением, поскольку он требует минимальных усилий для анализа - JS обрабатывает его изначально, а PHP превращает его в массив с json_decode.

.
...