Kotchasan Framework Documentation
Country Class - การจัดการข้อมูลประเทศ
Country Class - การจัดการข้อมูลประเทศ
คลาส Country เป็นเครื่องมือสำหรับการจัดการข้อมูลประเทศต่างๆ ในกรอบงาน Kotchasan โดยรองรับการแสดงชื่อประเทศในหลายภาษา
namespace
Kotchasan\Country;คุณสมบัติ
คลาส Country มีข้อมูลประเทศครบถ้วนพร้อมชื่อในภาษาไทย อังกฤษ และภาษาท้องถิ่น รองรับการใช้งานในระบบฟอร์มและการแสดงผล
เมธอดหลัก
get()
ดึงชื่อประเทศจากรหัส ISO
class ExampleClass {
<?php
public static function get($iso): string;
}Parameters:
$iso- รหัส ISO ของประเทศ (เช่น 'TH', 'US', 'JP')
Returns: ชื่อประเทศในภาษาปัจจุบัน หรือ string ว่างถ้าไม่พบ
ตัวอย่างการใช้งาน:
use Kotchasan\Country;
// ดึงชื่อประเทศตามภาษาปัจจุบัน
echo Country::get('TH'); // ไทย (ถ้าเป็นภาษาไทย) หรือ Thailand (ถ้าเป็นภาษาอังกฤษ)
echo Country::get('US'); // สหรัฐอเมริกา หรือ United States
echo Country::get('JP'); // ญี่ปุ่น หรือ Japan
// ตรวจสอบประเทศที่ไม่มีในระบบ
$country = Country::get('XX');
if (empty($country)) {
echo 'ไม่พบประเทศนี้';
}
// ระบบแสดงข้อมูลผู้ใช้
function displayUserInfo($user) {
return [
'name' => $user['name'],
'email' => $user['email'],
'country' => Country::get($user['country_code']) ?: 'ไม่ระบุ',
'country_code' => $user['country_code']
];
}
$user = [
'name' => 'สมชาย ใจดี',
'email' => 'somchai@example.com',
'country_code' => 'TH'
];
$userInfo = displayUserInfo($user);
echo "ประเทศ: " . $userInfo['country']; // ประเทศ: ไทย;all()
ดึงรายการประเทศทั้งหมด
class ExampleClass {
<?php
public static function all(): array;
}Returns: อาร์เรย์ของประเทศทั้งหมดโดยใช้รหัส ISO เป็น key และชื่อประเทศเป็น value
ตัวอย่างการใช้งาน:
use Kotchasan\Country;
// ดึงรายการประเทศทั้งหมด
$countries = Country::all();
// แสดงใน dropdown
echo '<select name="country">';
echo '<option value="">-- เลือกประเทศ --</option>';
foreach ($countries as $iso => $name) {
echo "<option value=\"{$iso}\">{$name}</option>";
}
echo '</select>';
// ระบบค้นหาประเทศ
function searchCountries($keyword) {
$countries = Country::all();
$results = [];
foreach ($countries as $iso => $name) {
if (stripos($name, $keyword) !== false) {
$results[$iso] = $name;
}
}
return $results;
}
// การใช้งาน
$searchResults = searchCountries('เอเชีย');
foreach ($searchResults as $iso => $name) {
echo "{$iso}: {$name}\n";
}
// ระบบฟอร์มลงทะเบียน
class RegistrationForm {
public function getCountryOptions($selectedCountry = '') {
$countries = Country::all();
$options = '<option value="">-- เลือกประเทศ --</option>';
foreach ($countries as $iso => $name) {
$selected = ($iso === $selectedCountry) ? 'selected' : '';
$options .= "<option value=\"{$iso}\" {$selected}>{$name}</option>";
}
return $options;
}
public function renderForm($data = []) {
$countryOptions = $this->getCountryOptions($data['country'] ?? '');
return "
<form method='post'>
<label>ชื่อ:</label>
<input type='text' name='name' value='" . ($data['name'] ?? '') . "' required>
<label>อีเมล:</label>
<input type='email' name='email' value='" . ($data['email'] ?? '') . "' required>
<label>ประเทศ:</label>
<select name='country' required>
{$countryOptions}
</select>
<button type='submit'>ลงทะเบียน</button>
</form>";
}
}
// การใช้งาน
$form = new RegistrationForm();
echo $form->renderForm(['country' => 'TH']);
// ระบบสถิติผู้ใช้ตามประเทศ
class UserStatistics {
private $database;
public function __construct($database) {
$this->database = $database;
}
public function getCountryStats() {
$stats = $this->database->createQuery()
->select('country_code', 'COUNT(*) as user_count')
->from('users')
->where(['country_code', '!=', ''])
->groupBy('country_code')
->orderBy('user_count DESC')
->toArray()
->execute();
$countries = Country::all();
$result = [];
foreach ($stats as $stat) {
$countryName = $countries[$stat['country_code']] ?? $stat['country_code'];
$result[] = [
'country_code' => $stat['country_code'],
'country_name' => $countryName,
'user_count' => $stat['user_count']
];
}
return $result;
}
public function renderStatsChart() {
$stats = $this->getCountryStats();
$html = '<div class="country-stats">';
$html .= '<h3>สถิติผู้ใช้ตามประเทศ</h3>';
$html .= '<table border="1">';
$html .= '<tr><th>ประเทศ</th><th>จำนวนผู้ใช้</th></tr>';
foreach ($stats as $stat) {
$html .= "<tr>";
$html .= "<td>{$stat['country_name']}</td>";
$html .= "<td>{$stat['user_count']}</td>";
$html .= "</tr>";
}
$html .= '</table>';
$html .= '</div>';
return $html;
}
}
// ระบบ API ข้อมูลประเทศ
class CountryAPI {
public function getCountry($iso) {
$country = Country::get($iso);
if (empty($country)) {
return [
'success' => false,
'message' => 'ไม่พบประเทศที่ระบุ'
];
}
return [
'success' => true,
'data' => [
'iso' => $iso,
'name' => $country
]
];
}
public function getAllCountries($search = '') {
$countries = Country::all();
if (!empty($search)) {
$filtered = [];
foreach ($countries as $iso => $name) {
if (stripos($name, $search) !== false || stripos($iso, $search) !== false) {
$filtered[$iso] = $name;
}
}
$countries = $filtered;
}
return [
'success' => true,
'data' => $countries,
'total' => count($countries)
];
}
public function handleRequest() {
$action = $_GET['action'] ?? '';
switch ($action) {
case 'get':
$iso = $_GET['iso'] ?? '';
header('Content-Type: application/json');
echo json_encode($this->getCountry($iso));
break;
case 'all':
$search = $_GET['search'] ?? '';
header('Content-Type: application/json');
echo json_encode($this->getAllCountries($search));
break;
default:
header('Content-Type: application/json');
echo json_encode([
'success' => false,
'message' => 'ไม่รองรับการทำงานนี้'
]);
}
}
}
// การใช้งาน API
// GET /api/country.php?action=get&iso=TH
// GET /api/country.php?action=all&search=เอเชีย
$api = new CountryAPI();
$api->handleRequest();
// ระบบตรวจสอบและทำความสะอาดข้อมูล
class CountryValidator {
public static function isValidCountryCode($code) {
return !empty(Country::get($code));
}
public static function validateUserData($data) {
$errors = [];
if (empty($data['name'])) {
$errors['name'] = 'กรุณาระบุชื่อ';
}
if (empty($data['email']) || !filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email'] = 'กรุณาระบุอีเมลที่ถูกต้อง';
}
if (empty($data['country']) || !self::isValidCountryCode($data['country'])) {
$errors['country'] = 'กรุณาเลือกประเทศที่ถูกต้อง';
}
return [
'valid' => empty($errors),
'errors' => $errors,
'data' => $data
];
}
public static function cleanCountryData($data) {
if (isset($data['country'])) {
$data['country'] = strtoupper(trim($data['country']));
// ถ้าไม่ใช่รหัสประเทศที่ถูกต้อง ให้ลบออก
if (!self::isValidCountryCode($data['country'])) {
unset($data['country']);
}
}
return $data;
}
}
// การใช้งาน Validator
$userData = [
'name' => 'สมชาย ใจดี',
'email' => 'somchai@example.com',
'country' => 'th' // จะถูกแปลงเป็น TH
];
$cleanData = CountryValidator::cleanCountryData($userData);
$validation = CountryValidator::validateUserData($cleanData);
if ($validation['valid']) {
echo 'ข้อมูลถูกต้อง';
} else {
foreach ($validation['errors'] as $field => $error) {
echo "{$field}: {$error}\n";
}
}ตัวอย่างการใช้งานขั้นสูง
use Kotchasan\Database;
use Kotchasan\Country;
// ระบบจัดการข้อมูลประเทศแบบครบวงจร
class CountryManager {
private $cache = [];
public function getCountryInfo($iso) {
if (!isset($this->cache[$iso])) {
$name = Country::get($iso);
if (!empty($name)) {
$this->cache[$iso] = [
'iso' => $iso,
'name' => $name,
'flag_url' => $this->getFlagUrl($iso),
'region' => $this->getRegion($iso)
];
} else {
$this->cache[$iso] = null;
}
}
return $this->cache[$iso];
}
private function getFlagUrl($iso) {
return "/assets/flags/" . strtolower($iso) . ".png";
}
private function getRegion($iso) {
$regions = [
'TH' => 'Southeast Asia',
'JP' => 'East Asia',
'KR' => 'East Asia',
'CN' => 'East Asia',
'US' => 'North America',
'GB' => 'Europe',
'DE' => 'Europe',
'FR' => 'Europe'
];
return $regions[$iso] ?? 'Unknown';
}
public function getCountriesByRegion($region) {
$countries = Country::all();
$result = [];
foreach ($countries as $iso => $name) {
$info = $this->getCountryInfo($iso);
if ($info && $info['region'] === $region) {
$result[$iso] = $info;
}
}
return $result;
}
public function renderCountrySelector($selectedCountry = '', $options = []) {
$countries = Country::all();
$showFlags = $options['show_flags'] ?? false;
$groupByRegion = $options['group_by_region'] ?? false;
$html = '<select name="country" class="country-selector">';
$html .= '<option value="">-- เลือกประเทศ --</option>';
if ($groupByRegion) {
$regions = [];
foreach ($countries as $iso => $name) {
$info = $this->getCountryInfo($iso);
if ($info) {
$regions[$info['region']][$iso] = $info;
}
}
foreach ($regions as $regionName => $regionCountries) {
$html .= "<optgroup label=\"{$regionName}\">";
foreach ($regionCountries as $iso => $info) {
$selected = ($iso === $selectedCountry) ? 'selected' : '';
$flag = $showFlags ? "🏳️ " : "";
$html .= "<option value=\"{$iso}\" {$selected}>{$flag}{$info['name']}</option>";
}
$html .= "</optgroup>";
}
} else {
foreach ($countries as $iso => $name) {
$selected = ($iso === $selectedCountry) ? 'selected' : '';
$flag = $showFlags ? "🏳️ " : "";
$html .= "<option value=\"{$iso}\" {$selected}>{$flag}{$name}</option>";
}
}
$html .= '</select>';
return $html;
}
}
// ระบบข้อมูลผู้ใช้นานาชาติ
class InternationalUserSystem {
private $countryManager;
private $database;
public function __construct($database) {
$this->countryManager = new CountryManager();
$this->database = $database;
}
public function createUser($userData) {
// ตรวจสอบข้อมูลประเทศ
$countryInfo = $this->countryManager->getCountryInfo($userData['country']);
if (!$countryInfo) {
throw new \InvalidArgumentException('รหัสประเทศไม่ถูกต้อง');
}
// เพิ่มข้อมูลประเทศเต็ม
$userData['country_name'] = $countryInfo['name'];
$userData['region'] = $countryInfo['region'];
$userData['created_at'] = date('Y-m-d H:i:s');
// บันทึกในฐานข้อมูล
return $this->database->createQuery()
->insert('users')
->values($userData)
->execute();
}
public function getUsersByCountry($countryCode) {
return $this->database->createQuery()
->select()
->from('users')
->where(['country', $countryCode])
->orderBy('created_at DESC')
->toArray()
->execute();
}
public function getRegionalStatistics() {
$stats = $this->database->createQuery()
->select('region', 'COUNT() as user_count')
->from('users')
->where(['region', '!=', ''])
->groupBy('region')
->orderBy('user_count DESC')
->toArray()
->execute();
return $stats;
}
public function generateCountryReport() {
$countries = Country::all();
$report = [];
foreach ($countries as $iso => $name) {
$userCount = $this->database->createQuery()
->select('COUNT(*) as count')
->from('users')
->where(['country', $iso])
->first();
$countryInfo = $this->countryManager->getCountryInfo($iso);
$report[] = [
'iso' => $iso,
'name' => $name,
'user_count' => $userCount ? $userCount->count : 0,
'region' => $countryInfo ? $countryInfo['region'] : 'Unknown'
];
}
// เรียงตามจำนวนผู้ใช้
usort($report, function($a, $b) {
return $b['user_count'] - $a['user_count'];
});
return $report;
}
}
// การใช้งานระบบ
$database = \Kotchasan\Database::create();
$userSystem = new InternationalUserSystem($database);
// สร้างผู้ใช้ใหม่
try {
$newUser = [
'name' => 'John Doe',
'email' => 'john@example.com',
'country' => 'US'
];
$userId = $userSystem->createUser($newUser);
echo "สร้างผู้ใช้สำเร็จ ID: {$userId}";
} catch (Exception $e) {
echo "เกิดข้อผิดพลาด: " . $e->getMessage();
}
// ดูสถิติตามภูมิภาค
$regionalStats = $userSystem->getRegionalStatistics();
foreach ($regionalStats as $stat) {
echo "{$stat['region']}: {$stat['user_count']} users\n";
}
// สร้างรายงานประเทศ
$countryReport = $userSystem->generateCountryReport();
foreach (array_slice($countryReport, 0, 10) as $country) {
echo "{$country['name']}: {$country['user_count']} users\n";
}หมายเหตุการใช้งาน
- การรองรับภาษา: แสดงชื่อประเทศตามภาษาปัจจุบันของระบบ
- ข้อมูลครบถ้วน: มีข้อมูลประเทศทั่วโลกพร้อมชื่อในภาษาท้องถิ่น
- การใช้งาน: เหมาะสำหรับฟอร์มและระบบที่ต้องการเลือกประเทศ
- Performance: ข้อมูลถูกจัดเก็บในรูปแบบ static array เพื่อความเร็ว
- มาตรฐาน: ใช้รหัส ISO 3166-1 alpha-2
คลาส Country เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการจัดการข้อมูลประเทศในกรอบงาน Kotchasan เหมาะสำหรับระบบที่ต้องการรองรับผู้ใช้นานาชาติ