2010-07-28 3 views
1

Salut J'ai un CFC/composant nommé "tsks_Session", qui effectue les tâches de la session. Dans cette fonction cfc/init(), a créé une structure qui contient toutes les variables nécessaires dans l'application. Certaines des variables sont des types de tableau.Variables SESSION dans la structure 'avec' type '' Array '

<cfcomponent > 
     <cffunction name="init"> 
     <cfargument name="structKey" > 
     <cflock timeout="35" > 
     <cfset SESSION = structNew() > 
     <cfset SESSION.bar_code = "" > 
     <cfset SESSION.price = "" > 
     <cfset SESSION.pub_date = "01/01/1900" > 
     <cfset SESSION.author = ArrayNew() > 
     <cfset SESSION.title = ArrayNew() >  
     <cfset SESSION.[bar_code_subj_pric] = structNew() > <!--- key = concatanation of  
                  bar_code and price ---> 
     <cfset SESSION.[bar_code_subj_pric].author = ArrayNew() > 
     <cfset SESSION.[bar_code_subj_pric].title = ArrayNew() > 
     </cflock> 
     </cffunction> 
    <!---getter---> 
    <cffunction name="getAuthor" returntype="array" access="public" output="false"> 
     <cfscript>return SESSION.author; </cfscript> 
    </cffunction> 
    <!---setter:adding the Array/"author" to the structue/"SESSION.[bar_code_subj_pric]" ---> 
    <cffunction name="setAuthor" retuntype="void" access="public" output="false"> 
    <cfargument name="bar_code_subj_pric" type="string" required="true"> 
    <cfargument name="author" type="array" required="true"> 
    <cfset var q = "" > 
    <cfparam name="author" default="" > 
     <cfloop index="i" from="1" to="arrayLen(SESSION.[bar_code_subj_pric].author)"> 
     <cfset SESSION.author = ArrayAppend(SESSION.[bar_code_subj_pric].author,"#arguments.author#")> 
     </cfloop> 
    </cffunction> 

    <!---getter.title---> 
    <cffunction name="gettitle" returntype="array" access="public" output="false"> 
     <cfscript>return SESSION.title; </cfscript> 
    </cffunction> 
    <!---setter:adding the Array/"title" to the structue/"SESSION.[bar_code_subj_pric]" ---> 
    <cffunction name="settitle" retuntype="void" access="public" output="false"> 
    <cfargument name="bar_code_subj_pric" type="string" required="true"> 
    <cfargument name="title" type="array" required="true"> 
    <cfset var q = "" > 
    <cfparam name="title" default="" > 
     <cfloop index="i" from="1" to="arrayLen(SESSION.[bar_code_subj_pric].title)"> 
     <cfset SESSION.title = ArrayAppend(SESSION.[bar_code_subj_pric].title,"#arguments.title#")> 
     </cfloop> 
    </cffunction> 
    </cfcomponent> 

1) sur une page d'affichage, ayant instanitiated la cfc, i a créé une str appelé

<cfset str[expld133] =structnew()> 

lorsque i sortie les fonctions SetAuthor ("expld133", Kelly)/setTitle ("expld133 ", 33,22), je reçois "The value that i am not passing an array type". Veuillez me dire ce qui est faux? 2) puis-je créer une structure appelée simplement "SESSION" est-elle sûre?

3) Y a-t-il une erreur dans la façon dont j'ajoute 2 tableaux différents (Auteur/Titre) à la structure principale "SESSION. [Bar_code_subj_pric]"?

Répondre

3

Pour la question n ° 1, je pense que la ligne qui échoue est probablement l'un de ces deux:

setAuthor("expId133", Kelly); 
setTitle("expId133", 33.22); 

Les deux méthodes attendent un objet tableau comme le 2 arguments; mais vous passez une variable nommée "Kelly" dans le premier cas, et un nombre dans le second cas. Si "Kelly" est censé être la valeur, pas un nom de variable, vous devrez le citer ("Kelly" pas Kelly), mais ce n'est pas encore un tableau. Si vous voulez que ce soit un tableau contenant la chaîne 1 "Kelly" alors vous passeriez ["Kelly"] en supposant que vous utilisez CF8 ou plus tard.

Pour la question 2, vous pouvez créer une variable nommée "SESSION" (elle ira dans la portée VARIABLES du composant), et il est "sûr" ... mais je vous recommande fortement de ne pas le faire. Vous demandez simplement de la confusion. De plus, elle (la structure) ne sera pas stockée dans la portée de la session (sauf si le composant y est stocké). Pourquoi ne pas simplement utiliser la portée de la session? Pourquoi créer une nouvelle structure appelée "SESSION"?

Pour la question 3, je ne sais pas si c'est une syntaxe valide ou non, mais je ne le pense pas. Essayez l'un de ces:

SESSION[bar_code_subj_pric] = foo; 

Cela utilisera bar_code_subj_pric comme une variable et sa valeur sera la structure nom de clé. Donc, si bar_code_subj_pric est évaluée à 4, la déclaration entière est évaluée: session.4 = foo;

D'autre part, ce code:

SESSION.bar_code_subj_pric = foo; 
//this is also equivalent to: 
//SESSION["bar_code_subj_pric"] = foo; 

... crée une clé dans la structure de session nommée « bar_code_subj_pric » avec une valeur de la variable/objet foo.

Questions connexes