public function __invoke(Route $route = NULL) { $router = Router::getInstance(); if (is_null($route)) { $route = $router->GetByRequest(); } return call_user_func_array([$route->getController(), $route->action], $route->attributes); }
/** * * Redireciona a requisição e encerra a execução do script * * @param Route|string|null $params * * @return void * */ public function redirect($params = NULL) { if (empty($params)) { return $this->header('Location: ' . Router::href()); } if (is_string($params)) { return $this->header('Location: ' . $params); } if (is_array($params)) { $controller = empty($params['controller']) ? 'main' : $params['controller']; $action = empty($params['action']) ? 'index' : $params['action']; return $this->header('Location: ' . Router::href("{$controller}/{$action}")); } else { return $this->header('Location: ' . Router::href()); } exit; }
public static function href($uri = '') { return Router::href($uri); }
public static function RUN($application) { try { $config = Config::SetApplication($application); if (is_readable($config->dir . 'config.php')) { require_once $config->dir . 'config.php'; } } catch (InvalidApplicationException $e) { echo self::Error($e->getMessage()); return FALSE; } $request = Request::getInstance(); // Router em implementação $router = Router::getInstance(); $route = $router->GetByRequest(); if ($config->onlyroutes && !$route) { $route = Router::notfound(); } if ($route) { $request->controller = $route->controller; $request->action = $route->action; $request->params = (object) $route->attributes; } else { $request->parseRoute(); } $class = "\\Controller\\{$request->controller}Controller"; // Retorno caso configuração $outputreturn do controller seja true $output = ''; try { if (!class_exists($class)) { throw new Exception("A URL {$request->uri} é inválida."); } $app = new $class(); } catch (Exception $e) { echo self::Error($e->getMessage()); return FALSE; } if (!empty($request->post['mvc:model'])) { $model = '\\Model\\' . array_remove($request->post, 'mvc:model') . 'Model'; try { $param = new $model($request->post); if ($param) { $param = [$param]; } } catch (Exception $e) { $app->setOutput($app->index()); $app->output(); return FALSE; } } else { if (!!$route && count($route->attributes) > 0) { $param = $route->attributes; } else { if (empty($request->lost) && !is_numeric($request->lost)) { $param = NULL; } else { $param = [$request->lost]; } } } try { $output = $app->execute($param); } catch (Exception $e) { echo self::Error($e->getMessage()); return FALSE; } if ($app->outputreturn) { $app->setOutput($output); } $app->output(); return TRUE; }
* Configura a aplicação, setando o name e URL * Outras configurações também são possíveis, como conexão com banco, * Configurações de e-mail e etc. * * * English: * * Set the application by setting the name and URL * Other settings are also posible like connection to the database, * E-mail settings, etc. **/ Config::Set(['url' => 'http://localhost/Base/public_html/', 'name' => 'example']); // Seta a rota de erro 404 Router::notfound(['controller' => 'Error', 'action' => 'index']); // Setá a rota padrão, home/index Router::main(['controller' => 'Main', 'action' => 'index']); // Apenas replicando a rota padrão para ser acessada através do endereço /index Router::route('/index', Router::main()); // Rota para o formulário de LOGIN, acessível apenas via GET Router::get('/entrar', 'entrar', ['controller' => 'Login', 'action' => 'index']); // Replicando a rota /entrar para /login. Permitira acesso pelo mesmo Method que a rota /entrar (GET) Router::route('/login', 'login.form', Router::GetByName('entrar')->_clone()); // Rota para realizar o login, acessível apenas via POST Router::post('/login', 'login', ['controller' => 'Login', 'action' => 'login']); // Rota: GET /post/<id> Router::get('/post/:id', ['controller' => 'Main', 'action' => 'teste'])->params(['id' => '\\d+']); // Rota: GET /post/<algum-endereco> Router::get('/post/:slug', ['controller' => 'Main', 'action' => 'action'])->params(['slug' => '[a-zA-Z0-9\\-_]+']); // Rota: GET /post/<DD-MM-YYYY>/<algum-endereco> Router::get('/post/:date/:slug', ['controller' => 'Main', 'action' => 'pdate'])->params(['date' => '[0-9]{2}-[0-9]{2}-[0-9]{4}', 'slug' => '[a-zA-Z0-9\\-_]+']);