public function __construct(RouteGenerator $route, $controller_file = null) { if (!$route->isUsingController()) { throw new \Exception("Route must use Controller as action"); } list($controller, $method) = explode('@', $route->getActionName()); $this->route = $route; $this->files = new Filesystem(); $this->controller_class = $controller; $this->controller_method = $method; $this->controller_file = $controller_file ?: app_path('controllers/' . str_replace("\\", "/", $controller)) . '.php'; }
/** * Execute the console command. * * @return mixed */ public function fire() { $routes = Route::getRoutes(); $added_controllers = array(); $added_methods = array(); foreach ($routes as $route) { $route_generator = RouteGenerator::makeFromRoute($route); if ($route_generator->isUsingController()) { $route_generator->generateRouteAction(); $action_generator = $route_generator->getActionGenerator(); $controller = $action_generator->getControllerClass(); $method = $action_generator->getControllerMethod(); if ($action_generator->hasGenerateController()) { $added_controllers[] = $controller; $this->info("# Generate Controller '{$controller}'"); } if ($action_generator->hasGenerateMethod()) { $added_methods[] = $controller . ':' . $method; echo "> Generate method '{$method}' in controller '{$controller}'\n"; } } } $count_added_controllers = count($added_controllers); $count_added_methods = count($added_methods); if ($count_added_methods + $count_added_controllers > 0) { echo "\n"; } $this->info("# DONE!! {$count_added_controllers} Controllers added, {$count_added_methods} Methods added"); }
/** * Execute the console command. * * @return mixed */ public function fire() { $uri = $this->argument("uri"); $method = $this->argument("method"); $route_file = base_path($this->option("file")); $conditions = $this->option("where"); $action = ['uses' => $this->argument("uses"), 'after' => $this->option("after"), 'before' => $this->option("before"), 'as' => $this->option("name")]; foreach ($action as $key => $val) { if (is_null($val)) { unset($action[$key]); } } $route_generator = new RouteGenerator($method, $uri, $action); foreach ($conditions as $cond) { list($param, $regex) = explode(':', $cond, 2); $route_generator->where($param, $regex); } $route_str = strtoupper($method) . " " . $route_generator->resolvedUri(); $route_generator->generate($route_file, true); $this->info("# Generate route '{$route_str}' using '" . $route_generator->getActionName() . "'"); $action_generator = $route_generator->getActionGenerator(); $controller_class = $action_generator->getControllerClass(); $controller_method = $action_generator->getControllerMethod(); if ($action_generator->hasGenerateController()) { echo "> Generate controller '{$controller_class}'\n"; } if ($action_generator->hasGenerateMethod()) { echo "> Generate method '{$controller_method}' in controller '{$controller_class}'\n"; } }
/** * @param string $name * @param array $args * @return string */ public function generate($name, array $args = []) { return $this->generator->url($name, $args); }
function &findRoutes(&$player) { debug('Finding Routes'); $galaxies =& SmrGalaxy::getGameGalaxies($player->getGameID()); $tradeGoods = array(GOOD_NOTHING => false); $goods =& Globals::getGoods(); foreach ($goods as $goodID => &$good) { if ($player->meetsAlignmentRestriction($good['AlignRestriction'])) { $tradeGoods[$goodID] = true; } else { $tradeGoods[$goodID] = false; } } unset($good); $tradeRaces = array(); $races =& Globals::getRaces(); foreach ($races as $raceID => &$race) { $tradeRaces[$raceID] = false; } unset($race); $tradeRaces[$player->getRaceID()] = true; $galaxy =& $player->getSector()->getGalaxy(); $maxNumberOfPorts = 2; $routesForPort = -1; $numberOfRoutes = 1000; $maxDistance = 15; $startSectorID = $galaxy->getStartSector(); $endSectorID = $galaxy->getEndSector(); $db = new SmrMySqlDatabase(); $db->query('SELECT routes FROM route_cache WHERE game_id=' . $db->escapeNumber($player->getGameID()) . ' AND max_ports=' . $db->escapeNumber($maxNumberOfPorts) . ' AND goods_allowed=' . $db->escapeObject($tradeGoods) . ' AND races_allowed=' . $db->escapeObject($tradeRaces) . ' AND start_sector_id=' . $db->escapeNumber($startSectorID) . ' AND end_sector_id=' . $db->escapeNumber($endSectorID) . ' AND routes_for_port=' . $db->escapeNumber($routesForPort) . ' AND max_distance=' . $db->escapeNumber($maxDistance)); if ($db->nextRecord()) { $routes = unserialize(gzuncompress($db->getField('routes'))); debug('Using Cached Routes: #' . count($routes)); return $routes; } else { debug('Generating Routes'); $allSectors = array(); foreach ($galaxies as &$galaxy) { $allSectors += $galaxy->getSectors(); //Merge arrays } unset($galaxy); $distances =& Plotter::calculatePortToPortDistances($allSectors, $maxDistance, $startSectorID, $endSectorID); if ($maxNumberOfPorts == 1) { $allRoutes = RouteGenerator::generateOneWayRoutes($allSectors, $distances, $tradeGoods, $tradeRaces, $routesForPort); } else { $allRoutes = RouteGenerator::generateMultiPortRoutes($maxNumberOfPorts, $allSectors, $tradeGoods, $tradeRaces, $distances, $routesForPort, $numberOfRoutes); } unset($distances); $allRoutes =& $allRoutes[RouteGenerator::EXP_ROUTE]; $routesMerged = array(); foreach ($allRoutes as $multi => &$routesByMulti) { $routesMerged += $routesByMulti; //Merge arrays } unset($routesByMulti); unset($allSectors); SmrPort::clearCache(); SmrSector::clearCache(); $db->query('INSERT INTO route_cache ' . '(game_id, max_ports, goods_allowed, races_allowed, start_sector_id, end_sector_id, routes_for_port, max_distance, routes)' . ' VALUES (' . $db->escapeNumber($player->getGameID()) . ', ' . $db->escapeNumber($maxNumberOfPorts) . ', ' . $db->escapeObject($tradeGoods) . ', ' . $db->escapeObject($tradeRaces) . ', ' . $db->escapeNumber($startSectorID) . ', ' . $db->escapeNumber($endSectorID) . ', ' . $db->escapeNumber($routesForPort) . ', ' . $db->escapeNumber($maxDistance) . ', ' . $db->escapeObject($routesMerged, true) . ')'); debug('Found Routes: #' . count($routesMerged)); return $routesMerged; } }
foreach ($galaxies as &$galaxy) { $allSectors = $allSectors + $galaxy->getSectors(); } unset($galaxy); $maxNumberOfPorts = 2; $goods = array(true, true, true, true, false, false, false, false, false, false, false, false, false); $races = array(true, true, true, true, false, false, false, false, false, false, false, false, false, false); //$distances =& Plotter::calculatePortToPortDistances($allSectors,10,0,1440); $distances =& Plotter::calculatePortToPortDistances($allSectors, 10, 0, 14); //var_dump($distances); $routesForPort = -1; $numberOfRoutes = 5; if ($maxNumberOfPorts == 1) { $allRoutes = RouteGenerator::generateOneWayRoutes($allSectors, $distances, $goods, $races, $routesForPort); } else { $allRoutes = RouteGenerator::generateMultiPortRoutes($maxNumberOfPorts, $allSectors, $goods, $races, $distances, $routesForPort, $numberOfRoutes); } //var_dump($allRoutes); foreach ($allRoutes as $routeType) { $c = 0; foreach ($routeType as $routeMulti) { $c += count($routeMulti); // foreach($routeMulti as $multi => $route) { // echo $multi . ": ".$route->getRouteString(); // } // echo "\r\n"; // echo "\r\n"; } var_dump($c); } /**/