TP 5はモジュールの下のすべてのコントローラの命令/方法名を取得し、権限表に用いる
4008 ワード
getController($module); foreach ($all_controller as $controller) { $all_action = $this->getAction($module, $controller); foreach ($all_action as $action) { $controller = str_replace('Controller', '', $controller); $data[$i]['module'] = $module; $data[$i]['controller'] = $controller; $data[$i]['action'] = $action; // // if (!empty($module) && !empty($controller) && !empty($action)) { // $rule_name = $module . '/' . $controller . '/' . $action; // $rule = db('authrule')->where('name="' . strtolower($rule_name) . '"')->find(); // if (!$rule) { // $idata = array(); // $idata['module'] = strtolower($module . '/' . $controller); // $idata['type'] = "1"; // $idata['name'] = strtolower($rule_name); // $idata['title'] = ""; // $idata['regex'] = ""; // $idata['status'] = "1"; // db('authrule')->insert($idata); // } // } $i++; } } } echo '
'; print_r($data); } // private function getController($module) { if (empty($module)) { return null; } $module_path = Env::get('app_path') . '/' . $module . '/controller/'; // if (!is_dir($module_path)) { return null; } $module_path .= '/*.php'; $ary_files = glob($module_path); foreach ($ary_files as $file) { if (is_dir($file)) { continue; } else { $files[] = basename($file, '.php'); } } return $files; } // protected function getAction($module, $controller) { if (empty($controller)) { return null; } $customer_functions = []; $file = Env::get('app_path') . $module . '/controller/' . $controller . '.php'; if (file_exists($file)) { $content = file_get_contents($file); preg_match_all("/.*?public.*?function(.*?)\(.*?\)/i", $content, $matches); $functions = $matches[1]; // $inherents_functions = array('_initialize', '__construct', 'getActionName', 'isAjax', 'display', 'show', 'fetch', 'buildHtml', 'assign', '__set', 'get', '__get', '__isset', '__call', 'error', 'success', 'ajaxReturn', 'redirect', '__destruct', '_empty'); foreach ($functions as $func) { $func = trim($func); if (!in_array($func, $inherents_functions)) { $customer_functions[] = $func; } } return $customer_functions; } else { return false; } return null; } }