Completed
Push — master ( 89f95d...43ee50 )
by Wanderson
02:15
created

Controller::setTitle()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
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
	public function setTitle($title) {
41
		$this->addData('title', $title);
42
	}
43
44
	/**
45
	 * Adiciona uma variavel para usar na view
46
	 * @param string $name
47
	 * @param mixed $value
48
	 */
49
	public function addData($name, $value) {
50
		$this->data[$name] = $value;
51
	}
52
53
	/**
54
	 * Retorna uma variavel do controller
55
	 * @param string $name
56
	 * @return mixed|null
57
	 */
58
	public function getData($name) {
59
		if (key_exists($name, $this->data)) {
60
			return $this->data[$name];
61
		}
62
		return null;
63
	}
64
65
	/**
66
	 * Define o action
67
	 * @param string $action
68
	 */
69
	private function setAction($action = '') {
70
		if (empty($action)) {
71
			$action = $this->app->getParam(1);
72
		}
73
		$this->action = $this->toCamelCase($action);
74
	}
75
76
	/**
77
	 * Retorna o nome do action em camelCase
78
	 * @param string $action
79
	 * @return string
80
	 */
81
	private function toCamelCase($action) {
82
		if (strpos($action, '-') !== false) {
83
			$camelCaseName = str_replace(' ', '', ucwords(str_replace('-', ' ', $action)));
84
			$camelCaseName[0] = strtolower($camelCaseName[0]);
85
			$action = $camelCaseName;
86
		}
87
		return $action;
88
	}
89
90
	/** @return string */
91
	public function getAction() {
92
		return $this->action;
93
	}
94
95
	/**
96
	 * Carrega o controller,
97
	 * executando o action atual
98
	 */
99
	public function load() {
100
		$this->init();
101
		$action = $this->action;
102
		$view = $this->$action();
103
104
		if ($view instanceof View && !$this->app->isErrorPage()):
105
			$this->app->view = $view;
106
		endif;
107
108
		if (!$this->app->isErrorPage()):
109
			$this->app->view->mergeData($this->data);
110
			$this->app->view->validate();
111
		endif;
112
	}
113
114
	public function reload() {
115
		$this->init();
116
		$this->index();
117
		$this->app->view->mergeData($this->data);
118
	}
119
120
	/**
121
	 * Volta para o método index da pagina atual
122
	 */
123
	protected function backToIndex() {
124
		if (!$this->app->isErrorPage()):
125
			Url::instance()->redirect($this->app->getPage());
126
		endif;
127
	}
128
129
	/**
130
	 * Action Index
131
	 */
132
	abstract public function index();
133
134
	/**
135
	 * Este metodo é chamado sempre que o controller é carregado
136
	 */
137
	protected function init() {
138
		
139
	}
140
141
	/**
142
	 * Evita chamada de um metodo que nao existe
143
	 * @param string $name
144
	 * @param mixed[] $arguments
145
	 * @return boolean
146
	 */
147
	public function __call($name, $arguments) {
148
		$this->app->pageNotFound();
149
	}
150
151
}
152