junaooaks 3 Denunciar post Postado Novembro 26, 2014 pessoal acho que estou me confundindo nos paradigma da programação OOP estou criando uma class que ainda nao esta fazendo nada <?php namespace application\os; $controller= new OsController; $controller->modo = $_POST[modo]; $controller->idalterar = $_POST[idalterar]; $controller->dados = json_decode(stripslashes($_POST[dados]), true); $controller->itens = json_decode(stripslashes($_POST[itens]), true); echo $controller->modo; class OsController{ public $modo; public $idalterar; public $dados; public $itens; function __construct() { session_start(); //include_once '../../lib/php/C_Lib.php'; call_user_func_array(array(OsController, $this->modo), array()); } function Insert(){ //tirar zero a esqueda $this->dados[pessoa_id] = intval($this->dados[pessoa_id]); //declarar a situação $this->dados[situacao] = 'ABERTO'; $this->dados[tipo] = 'OS'; return $dados; } } quero da um echo no return, so que esta aparecendo esta mensagem Erro msg Json! poderia me dar uma direção? Compartilhar este post Link para o post Compartilhar em outros sites
Luis Paullo 47 Denunciar post Postado Novembro 26, 2014 como assim echo no return? o return RETORNA, simples assim. então. // call_user_func_array(array(OsController, $this->modo), array()); // que diabos e isso =X $array = $controller->insert(); //RETURN ARRAY var_dump($array); Compartilhar este post Link para o post Compartilhar em outros sites
William Avelar 15 Denunciar post Postado Novembro 26, 2014 Meio doido isso, o que você quer fazer primeiramente? A mensagem "Erro msg Json!" é oq aparece, pq é conteúdo da $_POST[modo]; Compartilhar este post Link para o post Compartilhar em outros sites
junaooaks 3 Denunciar post Postado Novembro 26, 2014 Luiz, foi a forma que encontrei para acessar as functions de forma dinâmica call_user_func_array(array(OsController, $this->modo), array()); call_user_func_array(array(OsController ->nome da class $this->modo ->qual function vai ser executada(insert, delete,update) ), array()); williame simples, esta class tem varias funções class OsController{ public $modo; public $idalterar; public $dados; public $itens; function __construct() { session_start(); include_once '../../lib/php/C_Lib.php'; call_user_func_array(array(OsController, $this->modo), array()); } function Insert(){} function Delet(){} function Update(){} } o parametro no __construct() faz o redirecionamento pra mim call_user_func_array(array(OsController ->nome da class $this->modo ->qual function vai ser executada(insert, delete,update) ), array()); so que estou tendo problema para pegar o retorno de cada ação de forma dinamica sem fazer if. nao quero fazer algo assim if($controller->modo=='Insert'){echo $controller->Insert();} if($controller->modo=='Delet'){echo $controller->Delet();} . . . . tem hora que tenho umas ideias meio maluca mesmo...kkkkkk nao gosto de IF kkkkk Compartilhar este post Link para o post Compartilhar em outros sites
William Avelar 15 Denunciar post Postado Novembro 27, 2014 Quando você execulta $controller= new OsController; ele já executa o construtor e faz oq você quer, você tem q colocar esse tratamento lá dentro, caso queira manipular essas informações, manipule o POST mas passa para ele assim, ira funcionar <?php namespace application\os; $controller = new OsController($_POST); class OsController{ public $modo; public $idalterar; public $dados; public $itens; function __construct($post) { $this->modo = $post[modo]; $this->idalterar = $post[idalterar]; $this->dados = json_decode(stripslashes($post[dados]), true); $this->itens = json_decode(stripslashes($post[itens]), true); session_start(); //include_once '../../lib/php/C_Lib.php'; call_user_func_array(array($this, $this->modo), array()); } function Insert(){ //tirar zero a esqueda $this->dados[pessoa_id] = intval($this->dados[pessoa_id]); //declarar a situação $this->dados[situacao] = 'ABERTO'; $this->dados[tipo] = 'OS'; return $dados; } } Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Novembro 27, 2014 <?php namespace application\os; class OsController{ public $modo; public $idalterar; public $dados; public $itens; function __construct($post) { session_start(); $this->modo = $post['modo']; $this->idalterar = $post['idalterar']; $this->dados = json_decode(stripslashes($post['dados']), true); $this->itens = json_decode(stripslashes($post['itens']), true); if(file_exists('../../lib/php/C_Lib.php')): include_once('../../lib/php/C_Lib.php'); else: echo 'Ocorreu um erro ao incluir o arquivo: <strong>C_Lib</strong> <br />'."\n"; endif; call_user_func_array(array($this, $this->modo), array()); } public function Insert(){ //tirar zero a esqueda $this->dados['pessoa_id'] = intval($this->dados['pessoa_id']); //declarar a situação $this->dados['situacao'] = 'ABERTO'; $this->dados['tipo'] = 'OS'; return $dados; } } $controller = new OsController($_POST); echo $controller->Insert(); Compartilhar este post Link para o post Compartilhar em outros sites
Luis Paullo 47 Denunciar post Postado Novembro 27, 2014 Não brother, o call_user_function no __constructor ta errado! Eu entendi sua ideia de metodo dinamico. vc esta tentando desenvolver um CONTROLLER, mas veja bem "delegação de eventos" e "responsabilidade unica". um Controller delega responsabilidades. Então seus métodos insert e delete não deveriam estar ai! Estude a respeito de métodos mágicos especialmente o __call. (Particularmente não gosto da ideia). E também sobre Front Controller e Command (patterns, conteúdo mais avançado). class OsController { private $args = ['action' => null]; public function __construct(array $args) { $this->args = $args; } public function setArgs(array $a) { $this->args = $a; } protected function insert(array $values = NULL) { echo "INSERT " . PHP_EOL; return true; } protected function delete(array $values = NULL) { echo "DELETE " . PHP_EOL; return $values['id']; } public function execute() { if (!method_exists($this, $this->args['action'])) throw new \BadFunctionCallException(sprintf("Method [%s] not found", $this->args['action'])); return call_user_func_array([$this, $this->args['action']], [$this->args]); }}$post = ['action' => 'delete', 'id' => 3];$c = new OsController($post); var_dump($c->execute());$c->setArgs(['action' => 'insert']);var_dump($c->execute());try { $c->setArgs(['action' => 'update']); var_dump($c->execute());} catch (\Exception $e) { echo $e->getMessage();} Compartilhar este post Link para o post Compartilhar em outros sites