2016-04-11 3 views
2

Ich benutze F3 (Fat-Free Framework) für ein Projekt bei der Arbeit und bin über ein Problem gestolpert, über das ich keine Informationen zu finden scheint. Weder Google noch offizielle F3-Dokumentation haben mir etwas gegeben. Vielleicht stelle ich einfach die falsche Frage. Hier ist das Problem.Richtige Lösung

Ich habe ein Array, das ungefähr so ​​aussieht: (Stadt => type => Gebäude)

$places = array(
    'City A' => array(
     'special' => array(), 
     'standard' => array('Campus',), 
    ), 
    'City B' => array(
     'special' => array(
      'collect', 
      'exam', 
      'Brännässlan', 
     ), 
     'standard' => array(
      'Building A', 
      'Building B', 
      'Building C', 
      'Building D (Library)', 
      'Capitol', 
      'Flair', 
     ), 
    ), 
), 

Was ich tun möchte, ist jedes Gebäude in der Anordnung zu prüfen, ob ein entsprechendes Wörterbuch zu sehen Variable wurde dafür gesetzt. Ich verwende $f3->exists('dict_select_hus_arrayValue'), um zu überprüfen, und es funktioniert gut, bis die Funktion auf ein Gebäude mit dem Buchstaben "ä" trifft. Wenn dies der Fall ist, wird ein Fehler von 500 mit dem Text Invalid hive key 'dict_select_hus_Brännässlan' ausgelöst.

Ich nehme an, es hat mit der Codierung der Zeichenfolge zu tun, aber ich arbeite in einer reinen UTF-8-Umgebung und F3 sollte in der Lage sein, damit umzugehen. Hat jemand anderes das gefunden und vor allem eine Lösung für das Problem gefunden?

+0

was bedeutet 'exists' Funktion hat? –

+0

Es gibt true zurück, wenn die Wörterbuchzeichenfolge gefunden wird, false, wenn dies nicht der Fall ist, und stürzt mit einer 500 ab, wenn 'ä' in der Zeichenfolge steht (was ich nicht für geplant halte). – Szandor

Antwort

5

F3 lässt keine sprachspezifischen Zeichen als Schlüssel in der Struktur zu. Ich bin mir nicht sicher, ob dies beabsichtigt oder zufällig war, aber die Ursache dieses Problems liegt in der &ref Methode der Base Klasse. Sie werden irgendwo um Linie 244 a preg_match('/^\w+$/',$parts[0]) finden. Dies wird in Ihrem Fall false zurückgeben, da sprachspezifische Zeichen nicht innerhalb von \w liegen.

Mein Rat an beiden change this expression wäre Zeichen wie diejenigen enthalten, die Sie verwenden (Sie müssen über diese Änderung im Falle daran zu erinnern, werden Sie später F3 aktualisieren oder es aus irgendeinem Grund zurückgesetzt) ​​oder strip the string von ihnen, bevor sie mit F3 Überprüfung .

5

Es ist wahr, dass ein Stockschlüssel keine speziellen Zeichen haben darf, wie @george007 herausgefunden hat. Aber das gilt nur für die ersten Stockschlüssel-Segment $part[0]. Es ist frei, es eine Stufe tiefer zu benutzen. Also city.Brännässlan sollte in Ordnung sein. Stellen Sie einfach Ihre Städte und diktierenden Einträge auf eine tiefere Ebene. das heißt:

$f3->set('places',$places);

lang file:

dict.select_hus.Brännässlan = XY 
dict.select_hus.Kairo = YZ 

php:

foreach ($f3->get('places') as $c_name => $city) { 
    if ($f3->exists('dict.select_hus.'.$c_name)) { 
    // it's there 
    } 
} 

One NB von http://fatfreeframework.com/base#set

Denken Sie daran: Hive Schlüssel case-sensitive sind. Darüber hinaus sind für die Gültigkeit Schlüssel root hive geprüft gegen diese erlaubten Zeichen: [a-zA-Z 0-9 _ ]

Verwandte Themen