Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
19 / 19 |
| Application | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
10 | |
100.00% |
19 / 19 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| app | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| run | |
100.00% |
1 / 1 |
3 | |
100.00% |
13 / 13 |
|||
| send | n/a |
0 / 0 |
4 | n/a |
0 / 0 |
|||||
| getPage | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| <?php | |
| namespace Win; | |
| use Win\DI; | |
| use Win\Controllers\Controller; | |
| use Win\HttpException; | |
| use Win\Services\Router; | |
| use Win\Templates\Template; | |
| use Win\Templates\View; | |
| use Win\Utils\Str; | |
| /** | |
| * Application (WinPHP Framework) | |
| * | |
| * Framework em PHP baseado em MVC | |
| * Responsável por incluir as páginas de acordo com a URL e criar a estrutura MVC | |
| * @author winPHP Framework http://github.com/winframework/winphp/ | |
| * @version 1.9.0 | |
| */ | |
| class Application | |
| { | |
| protected static Application $instance; | |
| public Controller $controller; | |
| public Router $router; | |
| public View $view; | |
| /** | |
| * Cria a aplicação principal | |
| */ | |
| public function __construct() | |
| { | |
| static::$instance = $this; | |
| $this->router = Router::instance(); | |
| } | |
| /** | |
| * Retorna o ponteiro para a aplicação principal | |
| * @return static | |
| */ | |
| public static function app() | |
| { | |
| return static::$instance; | |
| } | |
| /** | |
| * Executa o [Controller, action] e envia o retorno como resposta | |
| * @param string $class Controller | |
| * @param string $method Action | |
| * @param array $args | |
| */ | |
| public function run($class, $method = 'index', ...$args) | |
| { | |
| if (!class_exists($class)) { | |
| throw new HttpException("Controller '{$class}' não encontrado", 404); | |
| } | |
| /** @var Controller $controller */ | |
| $controller = DI::instance($class); | |
| $controller->app = $this; | |
| $this->controller = $controller; | |
| $this->router->page = $this->getPage(); | |
| $this->router->action = $method; | |
| if (!method_exists($controller, $method)) { | |
| throw new HttpException("Action '{$method}' não encontrado em '{$class}'", 404); | |
| } | |
| $controller->init(); | |
| $response = $controller->$method(...$args); | |
| echo $this->send($response); | |
| } | |
| /** | |
| * Envia a resposta baseado no tipo | |
| * @param mixed $response | |
| * @return mixed | |
| * @codeCoverageIgnore | |
| */ | |
| private function send($response) | |
| { | |
| if (is_array($response)) { | |
| header('Content-Type: application/json'); | |
| return json_encode($response); | |
| } | |
| if ($response instanceof View) { | |
| $this->view = $response; | |
| if ($this->controller->layout) { | |
| return new Template($this->controller->layout, ['content' => $response]); | |
| } | |
| } | |
| return $response; | |
| } | |
| /** | |
| * Retorna a página atual | |
| * @return string | |
| */ | |
| protected function getPage() | |
| { | |
| $replaces = ['Controllers\\', 'Controller', 'App\\', '\\']; | |
| return Str::toUrl(str_replace($replaces, ' ', get_class($this->controller))); | |
| } | |
| } |