Chamar função de outro controller

2,900 views
Skip to first unread message

Matheus Oliveira"

unread,
Apr 11, 2009, 10:58:38 PM4/11/09
to Cake PHP Português
Boa noite, to coma dúvida em um projeto que estou fazendo com cake...

Tenho um controller chamado Mensagens (MensagensController)... dentro
do MensagensController eu preciso chamar uma função de outro
controller (TagsController)...

class MensagensController extends AppController
{
var $uses = array('Mensagen','Tag');

function index()
{
echo $this->Tag->teste();
}
}

class TagsController extends AppController
{
function teste()
{
return 'teste';
}
}

O cake acaba fazendo uma consulta sql:

--------------------
SQL Error: 1064: You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near 'teste' at line 1 [CORE\cake\libs\model\datasources
\dbo_source.php, line 525]

$sql = "teste"
$error = "1064: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'teste' at line 1"

Query: teste
--------------------

Como fazer?

Josenivaldo Benito Junior

unread,
Apr 13, 2009, 11:27:15 AM4/13/09
to cake-...@googlegroups.com
Matheus,

O cake interpreta:

$this->tag

como sendo um Model chamado tag e não o controller tag. (TagsController).

Você pode usar o requestAction (performance, etc, etc amplamento discutido aqui) ou pode, dependendo do caso, criar um método no model, pense bem, as vezes é mais adequado (as vezes o que você quer do outro controller é uma função que deveria estar no model e não no controller - se você pensar que o controller deve "colar" o model e a view e que a lógica de negócio deve estar no model vai perceber que muito do que fazemos no controller deveria/poderia estar no model).

Vc também pode criar um controller com "new" ou carrega-lo usando o App:import (não sei se funciona).

Abraço,
Benito.



2009/4/11 Matheus Oliveira" <mathe...@gmail.com>

Lucas Gameiro

unread,
Apr 13, 2009, 1:47:23 PM4/13/09
to cake-...@googlegroups.com
Veja se não é o caso de se criar um Component.

http://book.cakephp.org/complete/62/Components
--
Lucas Gameiro
(43)9937-7499



2009/4/13 Josenivaldo Benito Junior <jrbe...@benito.qsl.br>

rod

unread,
Apr 12, 2009, 4:24:11 PM4/12/09
to Cake PHP Português
$this->Tag->teste() busca pela função teste() do model de Tags e nao
do controller,
tente requestAction()

On Apr 11, 11:58 pm, "Matheus Oliveira\"" <matheuz...@gmail.com>
wrote:

Raphael Passini Diniz

unread,
Apr 13, 2009, 8:55:52 AM4/13/09
to cake-...@googlegroups.com
Matheus

Da forma como você escreveu, você está acessando o Model Tag e não o Controller Tag.

...
     echo $this->Tag->teste();
...

Para acessar uma Action de um Controller utilize:

...
$this->requestAction(array('controller'=>'Tag', 'action'=>'teste'));
...

Ou

...
$this->requestAction('/tags/teste');
...

Para mais informações consulte a API do CakePHP

http://api.cakephp.org/class/controller


$this->require(
2009/4/11 Matheus Oliveira" <mathe...@gmail.com>



--
Atenciosamente Raphael Passini Diniz
Sent from Belo Horizonte, MG, Brazil
George Carlin  - "Frisbeetarianism is the belief that when you die, your soul goes up on the roof and gets stu...

andre andrade

unread,
Apr 12, 2009, 1:38:08 PM4/12/09
to cake-...@googlegroups.com
requestAction(string $url, array $options)

2009/4/11 Matheus Oliveira" <mathe...@gmail.com>

Henrique Machado

unread,
Apr 12, 2009, 12:28:34 PM4/12/09
to cake-...@googlegroups.com
se você user

$this->Tag->teste();

Deverá existir uma função no model Tag, e não no controller

2009/4/11 Matheus Oliveira" <mathe...@gmail.com>
Reply all
Reply to author
Forward
0 new messages