Usando controller sem model – Cakephp

Usando controller sem model - Cakephp

Para utilizar uma controller que não tenha vinculo com nenhum banco de dados (não precisa de MODEL), basta utilizar o comando $uses e setar como false.


class
MyController extends AppController{
var $uses =false
;

}

Comentário referencial no código, como FIXME TODO BUG ISSUE TODO como usar?

Você viu isto em código. Isto pode ser chamado de code tags.

Estritamente é um comentário como outro qualquer. Ele pode ter um significado específico para alguma ferramenta. É comum IDEs ou pelo menos extensões deles terem alguma coisa que vasculham o código procurando comentários que começam com:

  • TODO: (“para fazer”) Alguém [eu] precisa arrumar isso urgente
  • FIXME: (“me conserte”) Tem um erro que precisa ser consertado aqui, mas funciona (TOFIX:)
  • HACK: (“gambi”) Não teve outro jeito de resolver pra cumprir o prazo, depois melhoro
  • XXX: (“atenção”) Alguns editores destacam comentários com isto como algo importante sem dar semântica específica
  • DONE: (“feito”) Avisar que o TODO está resolvido. Quando remover isto?
  • UNDONE: (“desfeito”) Precisei voltar ao original por alguma razão
  • ASAP: (“tão rápido quanto possível”) Precisa arrumar isso urgente
  • REMOVE: (“remova”) Esse código foi colocado só para testar algo e deve sumir
  • NOTE: (“anotação”) Só para informar que tem algo importante agora
  • BUG: (“falha”) Tem um bug conhecido aqui que precisa ser arrumado – especialização do FIXME – costuma ter um número de ticket associado
  • ISSUE: (“questão”) Há uma dúvida aqui se deve ser assim mesmo
  • ERROR: (“erro”) Tem um erro reproduzível aqui – especialização do FIXME
  • BROKEN: (“quebrado”) não vai pra frente mesmo, não adianta insistir – especialização do FIXME
  • GLITCH (“falha”) Algo estranho ocorre aqui em situação bem específica
  • REVIEW: (“revise”) Revise isso pra mim, usado onde se costuma fazer peer review
  • WTF: (“que p0rr@ é essa?”) Fizeram um besteira muito grande aqui

 

Exemplo de Utilização:

 

// TODO: alguma coisa escrita
código....

 

 

Referencehttps://pt.stackoverflow.com/questions/121245/todo-o-que-%C3%A9-qual-sua-utilidade-e-como-usar

Como utilizar método de outra controller em cakephp

Como utilizar método de outra controller em cakephp

 

Para carregar outra controller ou fazer a chamada dela, vocÊ pode utlizar o requestAction.

Exemplo:

echo $this->requestAction(
    array('controller' => 'articles', 'action' => 'featured'),
    array('named' => array('limit' => 3))
);

 ou

echo $this->requestAction(
    array('controller' => 'articles', 'action' => 'featured'),
    array('named' => array('limit' => 3))
);

echo $this->requestAction(
    array('controller' => 'articles', 'action' => 'view'),
    array('pass' => array(5))
);

 

 

Outra forma é:

App::import(‘Controller’, ‘Posts’);
$post = new PostsController();
$post->myFunction();

 

Diferente de quando usamos o $this->loadModel(‘Posts’) que irá efetuar execuções para o banco de dados, como o “find” ou “save”.

 

 

Referência: https://book.cakephp.org/2.0/en/controllers.html
Referência: https://stackoverflow.com/questions/7902293/how-to-use-methods-from-other-controllers-in-cakephp

Banco de Dados Dinâmico e Multiplos em Cakephp

APLICAÇÃO NA CONFIG DATABASE

Os nomes dos bancos são definidos em:  /app/config/database.php

EXAMPLE Multibanco

public $pro = array(‘datasource’ => ‘Database/Mysql’,
‘persistent’ => false,
‘host’ => ‘127.0.0.1’,
‘login’ => ‘root’,
‘password’ => ”,
‘database’ => ‘db_pro’,
‘encoding’ => ‘latin1’);

public $test = array(‘datasource’ => ‘Database/Mysql’,
‘persistent’ => false,
‘host’ => ‘127.0.0.1’,
‘login’ => ‘root’,
‘password’ => ”,
‘database’ => ‘db_test’,
‘encoding’ => ‘latin1’);

function __construct()
 {
     $this->default = $this->pro;
     $localhost = explode( ':', $_SERVER['HTTP_HOST'] );
     $arrRequest = explode('/',$_SERVER['REQUEST_URI']);
     $nameController = ($localhost[0] == 'localhost')? $arrRequest[3] :$arrRequest[2];//PEGA CONTROLLER
     switch ($nameController) {
        case 'users':
        case 'profiles':
        case 'logs':
        case 'companies':
              $this->default = $this->pro;
        break;
        default:
              $this->default = $this->test; 
        break;
} 

 

 

 

APLICAÇÃO DA CONTROLLER OU MODEL

TESTE 1

So, inside your Model, you would use the useDbConfig Attribute:

classExampleextendsAppModel{public $useDbConfig ='test';}

Inside your Controller, simply use:

$this->ModelName->useDbConfig ='test';

Thats all.

TESTE 2

I would use Model::setDataSource() rather than just setting the database config var. This is because there are other possible changes that come with changing the datasource:

$this->Model->setDataSource('test');


Reference: https://book.cakephp.org/2.0/en/models/model-attributes.html



CAKEPHP – Criando conditions no paginate com outras tabelas

 

Montando um Paginate com conditions em todas as tabelas

$this->paginate = array(
‘fields’=>’Financeiro.*,Aluno.*,Usuario.*’,
‘conditions’ => $condition,
‘joins’=>array(
array( ‘table’ => ‘aluno’,
‘alias’ => ‘Aluno’,
‘type’ => ‘LEFT’,
‘conditions’ => array(‘Financeiro.aluno_id = Aluno.id’)
),
array( ‘table’ => ‘usuario’,
‘alias’ => ‘Usuario’,
‘type’ => ‘LEFT’,
‘conditions’ => array(‘Aluno.usuario_id = Usuario.id’)
)
),
// ‘contain’ => array(‘Aluno’ ,’Usuario’),
// ‘link’ => array(‘Financeiro’ => array(‘Aluno’ => ‘Usuario’)),
‘limit’ => 30,
‘order’ => array(‘id’ => ‘DESC’)
);

CakePHP – Criando Concat no find list

Adicione na model:

public $virtualFields = array(‘nome_tipo‘ => ‘CONCAT(nome, ” (“, tipo,”)”)’);

 

Na controller faça a busca com o nome virtual que criou na modelo:

$tagsArr = $this->Tag->find(‘list’,array(‘fields’=>’nome_tipo‘, ‘recursive’=>-1));

Adicionando as colunas direto no find tanto para tabela, belongsTo ou hasMany com bindModel

As perguntas mais comuns é como faço para restringir a quantidade de colunas que traz na minha busca de uma tabela específica.

Exemplo de Tabelas:

Pagina – id, nome, data_cadastro
Promocao – id, id_pagina, nome, valor, data_cadastro
PromocaoConteudo – id, id_promocao, conteudo, data_cadastro

 

Então quando buscar a promoção teremos:

belongsTo = ‘Pagina’;
hasMany = ‘PromocaoConteudo’;

 

Estes exemplos abaixo, imaginamos que as tabelas já estão vinculadas na Model.

 

Trazendo tudo de tudo:
$promocoes = $this->Promocao->find(‘all’);

 

Vamos imaginar que queira somente algumas colunas de cada tabela que esteja vinculada a Promoção.

$this->Promocao->bindModel(array(‘hasMany’=>array(‘PromocaoConteudo’=>array(‘fields’=>array(‘PromocaoConteudo.conteudo’)))));
$promocoes = $this->Promocao->find(‘all’, array(‘fields’=>array(‘Promocao.nome’,’Promocao.valor’,’Pagina.nome’)));

 

Veja que quando é um BelongsTo é possível colocar nos fields do próprio find da promoção, mas quando é um HasMany, é necessário colocar com o bind como se fosse fazer o vínculo novamente.

 

 

 

Debug Query Cakephp via Controller e View

Podemos fazer dois tipos de Debug das queries executadas:

 

Controller –  irá retornar um array  com todas as queries que estão rodando:
Exemplo 1:
$destinos = $this->Destino->find(‘all’);
$log = $this->Destino->getDataSource()->getLog(false, false);
debug($log);

 

View  – também exibirá as queries que estão rodando, mas com visual em tabela para separar melhor o conteúdo:
Exemplo 2:

<?php echo $this->element(‘sql_dump’);?>

Desvincular Foreignkey (fk) model cakephp (unbindmodel)

Desvinculando Foreignkey (de uma model com a outra via “unbindModel”.

 

Imaginando que na sua model “USERS” você tenha um hasMany de outras duas models chamadas “PROFILES” e “CONTACTS”.

Tendo estas informações podemos concluir que quando eu fizer uma busca de um ou mais usuários ele trará as informações do perfil e do contato.

Exemplo 1: Todos contatos / todos perfis / todos contatos

$this->User->find(‘all’);

 

Exemplo 2: Todos contatos / nenhum perfis / nenhum  contatos

$this->User->find(‘all’, array(‘recursive’=> -1));

 

Exemplo 3: Todos contatosnenhum perfis / todos contatos
Dependendo do vínculo entre as tabelas, você poderá utilizar “hasMany” ou “belongsTo” dependendo da forma que foi criada seu banco de dados.

$this->User->unbindModel(array(‘hasMany’ => array(‘Profile’)));
ou
$this->User->unbindModel(array(‘belongsTo’ => array(‘Profile’)));

$this->User->find(‘all’);