10.1 - Componentes
Nunca desista porque encontrou um obstáculo! Os desafios são o tempero da vida!
O que é um Component segundo a documentação do CakePHP:
Os componentes são pacotes de lógica que são compartilhados entre controllers. O CakePHP vem com um conjunto fantástico de componentes que você pode usar para ajudar em várias tarefas comuns. Você também pode criar seus próprios componentes. Se você copia e cola parte de código entre controllers, você deve considerar criar seu próprio Component para conter essa funcionalidade. A criação de Componentes no CakePHP mantém o código dos controllers mais limpos e permite que você reutilize código entre controllers diferentes.
Documentação: https://book.cakephp.org/3.0/en/controllers/components.html#components
Os Components podem ser considerados como formas de criar pedaços reutilizáveis de código relacionado a controllers com uma característica específica ou conceito.
O CakePHP conta com vários componentes nativos:
FlashComponent, são usados nos controllers para criar mensagens flash para o $_SESSION
, para serem renderizadas em uma View usando FlashHelper.
Criando uma mensagem flash:
// Uses src/Template/Element/Flash/success.ctp
$this->Flash->success('This was successful');
Usamos os métodos success()
e error()
do FlashComponent
para definir uma mensagem que será armazenada numa variável de sessão.
Mensagem em texto plano
Também podemos criar uma mensagem em texto plano no controller através do método set que será recebida na view respectiva com:
$this->Flash->set('Isto é uma mensagem somente texto');
Para nosso exemplo, vamos criar um Component para criação de senhas com caracteres aleatórios. Para isso precisamos criar uma classe no diretório
src/Controller/Component/
, um nome de component seguindo a convenção do cake seria algo como: MinhaClasseComponent.php
que extende da classe Component
. Como umas das filosofias do nosso Framework favorito é facilitar o trabalho, podemos usar o PHP CLI(command line inteface) ou vulgarmente conhecido como Bake.
Para executar o console do cake, precisamos simplesmente executar o código abaixo.
Carregar componentes
No método initialize() de um controller
$this->loadComponent('Flash');
$this ->loadComponent('Auth');
Criação de um Componente
Criar o arquivo
src/Controller/Component/CalcularComponent.php, contendo:
<?php
namespace App\Controller\Component;
use Cake\Controller\Component;
class CalcularComponent extends Component
{
public function soma($valor1, $valor2)
{
$s =$valor1 + $valor2;
return $s;
}
}
Adicionar uma chamada no método initialize() do src/Controller/AppController
Executar num action, como o src/Controller/ClientesController.php
public function index()
{
print 'Componente Soma: '.$this->Calcular->soma(2,3);
Estando no AppController ele será visto por todos os demais controllers e seus métodos estarão disponíveis logo que cada controller seja executado.
Caso queira que apenas um controller tenha acesso ao mesmo, insira o método initialize() no início deste controller assim :
public function initialize()
{
parent::initialize();
$this->loadComponent('Calcular');
}
Exemplos de Componentes Simples
<?php
/**
* Component Calculo
* For CakePHP 3.x
* Autor: Ribamar FS
*
* This component allow access control to each action from application with web interface.
*
* Licenced with The MIT License
* Redistributions require keep copyright below.
*
* @copyright Copyright (c) Ribamar FS (http://ribafs.org)
* @link http://ribafs.org
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace App\Controller\Component;
use Cake\Controller\Component;
class CalculoComponent extends Component{
private $um;
private $dois;
public function soma($um,$dois){
return ($um + $dois);
}
public function subtracao($um,$dois){
return ($um - $dois);
}
public function multiplicacao($um,$dois){
return ($um * $dois);
}
public function divisao($um,$dois){
return ($um / $dois);
}
}
Exemplos Práticos com o CakePHP 3
https://www.tutorialspoint.com/cakephp/index.htm
Bom exemplo de criação de plugin
https://www.cakephpbrasil.com.br/tutorial/2017/03/07/criando-components-no-cakephp-3/
Padrões para a criação de um bom plugin para o CakePHP 3
https://www.cakedc.com/plugin-standard
Mais detalhes
https://book.cakephp.org/3.0/en/controllers/components.html
Comments fornecido por CComment