2010-05-06 3 views
4

Comment les gars suggèrent-ils de partager un fichier de constantes entre PHP et JavaScript, afin de ne pas répéter le code? Fichier XML? Je suppose que mélanger javascipt dans PHP ne serait pas la bonne solution !? MerciFichier de constantes communes pour PHP et JavaScript

+0

Quelques commentaires intéressants ici: http: // stackoverflow.com/questions/239832/comment-faire-vous-partager-configuration-informations-ou-affaires-règles-entre-langues – Ken

+0

Ma réponse est ici (je n'aime pas me répéter): http://stackoverflow.com/questions/440494/share-constants-between-php-and-javascript/6818597#6818597 – Dave

+0

Je ne veux pas me répéter, afin de vérifier cette réponse: http: // stackoverflow. com/questions/440494/share-constants-entre-php-et-javascript/6818597 # 6818597 – Dave

Répondre

4

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

Je dirais que l'utilisation JSON. Il est natif du javascript et il existe une bibliothèque de parseurs pour le php.

considèrent comme suit:

JSON:

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

puis le lire en php:

$const = json_decode(json_string); 

Cela vous donne l'objet const $ avec des propriétés comme const $ -> { 'var1'} retourne "valeur 1".

en JavaScript serait:

var const = eval(json_string); 

et vous donnera const.constants.var1 == "valeur 1".

mise en œuvre en termes Easiest réels pour js est:

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

Lorsque ajouté la sortie HTML que vous avez instantanément un objet avec les constantes d'autres objets comme ses enfants.

+0

+1 Semble comme la solution la plus simple. @OP: Du côté Javascript, vous pouvez charger les constantes séparément, ou (puisque cela semble inutile) avoir un processus de construction qui les prépare à votre fichier Javascript (précédé de 'var constantes =' et suivi de ';' pour faire fonctionner l'expression). –

+0

Juste pour m'assurer que je comprenais, je voudrais d'abord lire en PHP avec file_get_contents le fichier de constantes, puis, dans les balises de script, je ferais var constantes = "la chaîne de résultat"? – Luis

+0

et devrais-je faire cela dans chaque fichier php sur mon site? – Luis

0

Les variables de configuration à partager à la fois par PHP et JavaScript pourraient facilement être stockées en XML, oui. JSON pourrait être une meilleure solution, car il nécessite un minimum d'effort pour analyser - JS le gère nativement, et PHP le transforme en un tableau avec json_decode.

0

Vous pouvez essayer ma méthode. J'ai créé un fichier de configuration commun à utiliser avec les fichiers php et js.

Découvrez cette astuce:

PHP classe du fichier de configuration:

<?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 fichier:

// 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); 
} 

Comment utiliser JavaScript:

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

Sans exemple fonction CONFIG.get:

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

code PHP pour le fichier 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; 
} 

Voilà. J'espère que cela aidera quelqu'un :)

Questions connexes