Completed
Push — master ( e32bea...07ff99 )
by Wanderson
02:49
created

Controller::addData()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 3
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace Win\Mvc;
4
5
use Win\Helper\Url;
6
7
/**
8
 * Controllers
9
 * 
10
 * São responsáveis por processar as requisições e definir as Views
11
 */
12
abstract class Controller {
13
14
	public static $dir = '/app/controller/';
15
16
	/**
17
	 * Ponteiro para Aplicação Principal
18
	 * @var Application
19
	 */
20
	public $app;
21
22
	/** @var string */
23
	private $action;
24
25
	/** @var string */
26
	public $layout = 'main';
27
28
	/** @var mixed[] Array variaveis para usar na View */
29
	private $data = [];
30
31
	/**
32
	 * Cria o Controller, definindo o action
33
	 */
34
	public function __construct($action = '') {
35
		$this->app = Application::app();
36
		$this->setAction($action);
37
	}
38
39
	/**
40
	 * Adiciona uma variavel para usar na view
41
	 * @param string $name
42
	 * @param mixed $value
43
	 */
44
	public function addData($name, $value) {
45
		$this->data[$name] = $value;
46
	}
47
48
	/**
49
	 * Define o action
50
	 * @param string $action
51
	 */
52
	private function setAction($action = '') {
53
		if (empty($action)) {
54
			$action = $this->app->getParam(1);
55
		}
56
		$this->action = $this->toCamelCase($action);
57
	}
58
59
	/**
60
	 * Retorna o nome do action em camelCase
61
	 * @param string $action
62
	 * @return string
63
	 */
64
	private function toCamelCase($action) {
65
		if (strpos($action, '-') !== false) {
66
			$camelCaseName = str_replace(' ', '', ucwords(str_replace('-', ' ', $action)));
67
			$camelCaseName[0] = strtolower($camelCaseName[0]);
68
			$action = $camelCaseName;
69
		}
70
		return $action;
71
	}
72
73
	/** @return string */
74
	public function getAction() {
75
		return $this->action;
76
	}
77
78
	/**
79
	 * Carrega o controller,
80
	 * executando o action atual
81
	 */
82
	public function load() {
83
		$this->init();
84
		$action = $this->action;
85
		$view = $this->$action();
86
		
87
		if ($view instanceof View):
88
			$this->app->view = $view;
89
		endif;
90
91
		$this->app->view->mergeData($this->data);
92
		$this->app->view->validate();
93
	}
94
95
	/**
96
	 * Volta para o método index da pagina atual
97
	 */
98
	protected function backToIndex() {
99
		Url::instance()->redirect($this->app->getPage());
100
	}
101
102
	/**
103
	 * Action Index
104
	 */
105
	abstract public function index();
106
107
	/**
108
	 * Este metodo é chamado sempre que o controller é carregado
109
	 */
110
	protected function init() {
111
		
112
	}
113
114
	/**
115
	 * Evita chamada de um metodo que nao existe
116
	 * @param string $name
117
	 * @param mixed[] $arguments
118
	 * @return boolean
119
	 */
120
	public function __call($name, $arguments) {
121
		$this->app->pageNotFound();
122
	}
123
124
}
125