/** * Modelをロードする(requireとgetInstance) */ public static function load($model) { $model .= 'Model'; if (empty(self::$loaded[$model])) { require snakeCase($model) . '.php'; self::$loaded[$model] = new $model(); } return self::$loaded[$model]; }
/** * URLを作成する * TODO:ユーザー側のURL生成時はApp:userURLを使用に置き換え最終的にblog_idの部分を削る */ public static function url($args = array(), $reused = false) { // 現在のURLの引数を引き継ぐ if ($reused == true) { $gets = Request::getInstance()->getGet(); unset($gets[Config::get('ARGS_CONTROLLER')]); unset($gets[Config::get('ARGS_ACTION')]); $args = array_merge($gets, $args); } $controller = Config::get('ControllerName'); if (isset($args['controller'])) { $controller = $args['controller']; unset($args['controller']); } $controller = snakeCase($controller); $action = Config::get('ActionName'); if (isset($args['action'])) { $action = $args['action']; unset($args['action']); } // 引数のデバイスタイプを取得 $device_name = App::getArgsDevice(); if (!empty($device_name) && isset($args[$device_name])) { unset($args[$device_name]); } // URL/Controller/Methodの形で返却 if (Config::get('URL_REWRITE')) { $params = array(); foreach ($args as $key => $value) { $params[] = $key . '=' . $value; } if (!empty($device_name)) { $params[] = $device_name; } $url = Config::get('BASE_DIRECTORY') . $controller . '/' . $action; if (count($params)) { $url .= '?' . implode('&', $params); } return $url; } // BlogIdを先頭に付与する $blog_id = null; if (isset($args['blog_id'])) { $blog_id = $args['blog_id']; unset($args['blog_id']); } $params = array(); $params[] = Config::get('ARGS_CONTROLLER') . '=' . $controller; $params[] = Config::get('ARGS_ACTION') . '=' . $action; foreach ($args as $key => $value) { $params[] = $key . '=' . $value; } if (!empty($device_name)) { $params[] = $device_name; } $url = Config::get('BASE_DIRECTORY') . Config::get('DIRECTORY_INDEX'); if (count($params)) { $url .= '?' . implode('&', $params); } if ($blog_id) { $url = '/' . $blog_id . $url; } return $url; }
/** * ルーティング用メソッド */ function getRouting() { require_once Config::get('CONFIG_DIR') . Config::get('ROUTING'); // ルーティング設定を読み込み $request = Request::getInstance(); $defaultClass = Config::get('DEFAULT_CLASS_NAME'); $defaultMethod = Config::get('DEFAULT_METHOD_NAME'); $prefix = Config::get('APP_PREFIX'); $denyClass = $prefix ? $prefix . 'Controller' : 'AppController'; $denyMethod = array('process', 'display', 'fetch', 'set'); $denyPattern = array('CommonController' => array('install')); $argsc = Config::get('ARGS_CONTROLLER'); $argsa = Config::get('ARGS_ACTION'); $className = pascalCase(basename($request->get($argsc))); $className = $className ? $className . 'Controller' : $defaultClass; $classFile = Config::get('CONTROLLER_DIR') . ($prefix ? $prefix . '/' : '') . snakeCase($className) . '.php'; $methodName = $request->get($argsa, $defaultMethod); $methodName = in_array($methodName, $denyMethod) ? $defaultMethod : $methodName; if ($className == $denyClass || !is_file($classFile) || isset($denyPattern[$className]) && in_array($methodName, $denyPattern[$className])) { $className = $defaultClass; $classFile = Config::get('CONTROLLER_DIR') . ($prefix ? $prefix . '/' : '') . snakeCase($className) . '.php'; $methodName = $defaultMethod; } return array($classFile, $className, $methodName); }
/** * 現在選択中のメニューかどうかを返す * @param params = array('entries/create', 'entries/edit', ...), */ public static function isActiveMenu($params) { // コントローラー名とメソッド名を取得 static $controller_name = null; static $method_name = null; if ($controller_name == null) { $controller_name = snakeCase(Config::get('ControllerName')); $method_name = snakeCase(Config::get('ActionName')); } if (is_string($params)) { $params = array($params); } // コントローラー名とメソッド名を判定 foreach ($params as $value) { list($c_name, $m_name) = explode('/', $value); if (lcfirst($c_name) != $controller_name) { continue; } if (!empty($m_name) && snakeCase($m_name) != $method_name) { continue; } return true; } return false; }
/** * 画面表示処理 */ public function display($fw_template, $fw_data = array(), $fw_is_prefix = true) { $fw_template = snakeCase($fw_template); // データの設定 if (count($fw_data)) { // 定義済み変数に関しては展開させない unset($fw_data['fw_template']); unset($fw_data['fw_is_prefix']); // fw_dataがある場合は渡された値のみ展開 extract($fw_data); } else { // 定義済み変数に関しては展開させない unset($this->data['fw_template']); unset($this->data['fw_is_prefix']); // displayDataが無い場合はControllerのdataを展開 extract($this->data); } // 展開完了後fw_dataは解除 unset($fw_data); // リクエストデータ $request = Request::getInstance(); // Debug用にテンプレートで使用可能な変数一覧表示 if (Config::get('DEBUG_TEMPLATE_VARS')) { include Config::get('VIEW_DIR') . 'Common/variables.html'; } // Template表示 $fw_template_path = Config::get('VIEW_DIR') . ($fw_is_prefix ? Config::get('APP_PREFIX') . '/' : '') . $fw_template; $fw_template_device_path = preg_replace('/^(.*?)\\.([^\\/\\.]*?)$/', '$1' . Config::get('DEVICE_PREFIX.' . Config::get('DeviceType')) . '.$2', $fw_template_path); if (is_file($fw_template_device_path)) { // デバイス毎のファイルがあればデバイス毎のファイルを優先する include $fw_template_device_path; } elseif (is_file($fw_template_path)) { Debug::log('Template[' . $fw_template_path . ']', false, 'system', __FILE__, __LINE__); include $fw_template_path; } else { Debug::log('Not Found Template[' . $fw_template_path . ']', false, 'error', __FILE__, __LINE__); } }