Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

atomicBRblaster

OOP + MVC (Sem framework) + Form único

Recommended Posts

Boa tarde, senhoras e senhores,

 

Estou trabalhando num projeto no qual tenho mais como objetivo o aprendizado que qualquer outra coisa e nele estou implementando o conceito de MVC, mas sem me utilizar de qualquer framework para tal, justamente para "sofrer" com o aprendizado.

 

Estou trabalhando num projeto que tem como premissa dispor de um único form para executar as interações com banco de dados, por exemplo:

 

- Uma única página (frmUser.php) com um form a esquerda e uma lista de usuários cadastrados a direita. Quero, através deste form executar tarefas de inclusão, remoção, atualização e deleção de usuários, ou seja, sem a necessidade de arquivos do tipo "editar.php", "excluir.php" ou ficar passando por páginas que tem como objetivo só apresentar mensagens de erro ou sucesso na operação.

 

Para tal, a estrutura que idealizei é simples: classUser.php (M), frmUser.php (V) e ctrlUser.php ©.

 

Estou "penando" principalmente com a questão atribuição dos "Values" dos campos do form, pois ao enviar dados de um form por meio dos POSTS para os métodos da classe, os campos ficam carregados com as informações passadas, já que o atributo "value" contém os gets da instância da classe User.

 

Alguém tem uma solução, dica ou exemplo para me ajudar com essa questão?

 

Desde já agradeço a todos pela atenção e desejo um ótimo final de semana. =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

A verdade é que nessa situação exposta com a qual quero trabalhar, não sei nem por onde começar...Tô mais pra iniciante que pra "enferrujado"...

 

Não postei a classe DBControl pq basicamente fazem as operações de banco (CRUD) de maneira "genérica" de uma classe que encontrei nos sites de classes a fora e adaptei.

 

Seguem os códigos...

 

Obrigado a todos pela atenção e ajuda! =D

 

[frmUsers.php]

<?php
require_once("../ctrl/appInfos.php");
require_once("../ctrl/ctrlUsers.php");
?>
<!DOCTYPE HTML>
<html>
<head>
<title><?= $pageUsers ?> || <?= $appName ?> :: <?= $appDescription ?> | Version: <?= $appVersion; ?></title>
<meta content="pt-br" http-equiv="Content-Language"/>
<meta content="text/html" charset="utf-8" http-equiv="Content-Type"/>

</head>
<body>
	<form name="frmUsers" method="post" action="">
		<h1><?= $pageUsers; ?></h1>
		<h3><?= $statusMsg; ?></h3>
		<input type="hidden" name="usrId" value="<?= $user->getId(); ?>">
		<p><input type="text" placeholder="Nome" name="usrFirstName" value="<?= $user->getFirstName(); ?>" autofocus required></p>
		<p><input type="text" placeholder="Sobrenome" size="30" name="usrLastName" value="<?= $user->getLastName(); ?>"></p>
		<p><input type="email" placeholder="E-Mail" size="30" name="usrEmail" value="<?= $user->getEmail(); ?>"></p>
		<p><input type="text" placeholder="Cargo" size="40" name="usrPosition" value="<?= $user->getPosition(); ?>"></p>
		<p><input type="text" placeholder="Departamento" size="35" name="usrDepartment" value="<?= $user->getDepartment(); ?>"></p>
		<p><input type="text" placeholder="Login" size="15" name="usrLogin" value="<?= $user->getLogin(); ?>" required></p>
		<p><input type="password" placeholder="Senha" size="15" name="usrPassword" value="<?= $user->getPassword(); ?>" required></p>
		<p><label>Usuário Ativo?</label></p>
		<p><label>Sim<input type="radio" name="usrActive" value="1" required> | <label>Não</label><input type="radio" name="usrActive" value="0" required></p>
		<p><button type="submit" name="btnSave">Salvar</button></p>
	</form>
</body>
</html>

-----------------------------

[classUser.php]

<?php

//require_once("classValidate.php");

class User {
	private $id = "";
	private $firstName = "";
	private $lastName = "";
	private $email = "";
	private $position = "";
	private $department = "";
	private $login = "";
	private $password = "";
	private $active = "";

	public function __construct(){

	}

	public function getId(){
		return $this->id;
	}
	public function getFirstName(){
		return $this->firstName;
	}
	public function getLastName(){
		return $this->lastName;
	}
	public function getEmail(){
		return $this->email;
	}
	public function getPosition(){
		return $this->position;
	}
	public function getDepartment(){
		return $this->department;
	}
	public function getLogin(){
		return $this->login;
	}
	public function getPassword(){
		return $this->password;
	}
	public function getActive(){
		return $this->active;
	}
	public function setId($id){
		$this->id = $id;
	}
	public function setFirstName($firstName){
		$this->firstName = $firstName;
	}
	public function setLastName($lastName){
		$this->lastName = $lastName;
	}
	public function setEmail($email){
		//if(Validate::checkEmail($this->email))
			$this->email = $email;
	}
	public function setPosition($position){
		$this->position = $position;
	}
	public function setDepartment($department){
		$this->department = $department;
	}
	public function setLogin($login){
		$this->login = $login;
	}
	public function setPassword($password){
		if($this->password != ""){
			$this->password = md5($password);
		}
	}
	public function setActive($active){
		$this->active = $active;
	}
}
?>

--------------------------------

[ctrlUsers.php]

<?php
require_once("../classes/classUser.php");
require_once("../classes/classDBControl.php");

$statusMsg = null;

$user = new User(); // Instância padrão da classe User para controle e gerência dos usuários.
$db = new DBControl("localhost", "root", "blahblahblah", "raddar");

$user->setFirstName($_POST["usrFirstName"]);
$user->setLastName($_POST["usrLastName"]);
$user->setEmail($_POST["usrEmail"]);
$user->setPosition($_POST["usrPosition"]);
$user->setDepartment($_POST["usrDepartment"]);
$user->setLogin($_POST["usrLogin"]);
$user->setPassword($_POST["usrPassword"]);
$user->setActive($_POST["usrActive"]);

if(isset($_POST["btnSave"])){
	$db->dbOpenConnection();
	if(!$user->getId()){
		$db->dbInsert("users", array("", $user->getFirstName(), $user->getLastName(), $user->getEmail(), $user->getPosition(), $user->getDepartment(), $user->getLogin(), $user->getPassword(), $user->getActive()));
		$statusMsg = "SUCESSO! Usuário adicionado com sucesso!";
	} else {
		$db->dbUpdate();
		$statusMsg = "SUCESSO! Usuário alterado com sucesso!";
	}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, você tem varios erros ae, mas direto a sua duvida você so pecou numa unica coisa, nao eh a view (neste caso o form) q chama o controller, eh o controller q chama a view...

 

perceba que kem faz o fluxo de informacao , kem controla eh o controller, por isto o nome, eh o controller q pega os dados com o model e joga na view, o view pega os dados enviados pelo usuario manda pro controller q processa e manda pro model persistir...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu faco isso na controller (tmb to aprendendo MVC)

 

class controller_Associados { 

   private $model;

   function __construct() {
       $this->model = new model_Associados_model();
   }

   public function update() {
       if (empty($_POST['nomeA']) && empty($_POST['cpf']))
           throw new ErrorException('Preencha todos os campos!');
       $this->model->entity($_POST);
       return $this->model->save();

   }

   public function insert() {
       if (empty($_POST['nomeA']) && empty($_POST['cpf']))
           throw new ErrorException('Preencha todos os campos!');
       $this->model->entity($_POST);
       return $this->model->save();

   }

public function delete(){}
  $this->model->setId($_POST['id']);
       return $this->model->_delete();
}


 

Aparti da ai e so passa os parametros por URL (eu passo por ajax..)

 

usa call_user_func() pra executa os metodos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

delete, update e insert sao funcoes do model e nao do controller, você nao seguiu absolutamente nada de mvc @luis...alem disso, onde esta a view...?releia o q eu falei no meu post anterior...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, você tem varios erros ae, mas direto a sua duvida você so pecou numa unica coisa, nao eh a view (neste caso o form) q chama o controller, eh o controller q chama a view...

 

perceba que kem faz o fluxo de informacao , kem controla eh o controller, por isto o nome, eh o controller q pega os dados com o model e joga na view, o view pega os dados enviados pelo usuario manda pro controller q processa e manda pro model persistir...

 

@Igor, tecnicamente, nesse caso, devo só "mudar" o include/require de lugar?

 

E quais outros erros encontraste que eu não estou encontrando? =P Definitivamente preciso rever meus entendimentos de MVC...=/

 

Sobre os métodos CRUD, eles de fato estão num model, no caso, a classe DBControl.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o nome do metodo eu coloco oq eu quize o codigo e meu. kkkkkkkkkkkkkkkkkkkkkkkkkkkk..

 

voce ta vendo algum instrucao SQL na controller?

 

$this->model->save(); // isso aki e da model se voce nao percebeu. =X

 

e a model que faz todo o trabalho.. o controller so passa a requisicao.. Ta errado?

 

foi essa ideia que quiz da pra ele..

 

@luis, isto aki nao eh curral, eh um espaco de trocas de ideias, ok? por favor respeite os demais membros....nao seja indulgente...

 

@atomic, ha regras no forum e q nao posso fugir do assunto do topico, podemos trocar mps a respeito, por hora, vou me ater a sua duvida

 

nao seria SO trocar o include de lugar, o controler controla as requisicoes, se fossre trocar o include de lugar, como ele chamaria a view?

 

esse controller so tem uma acao..ele so vai controlar uma unica requisicao...sendo assim nao seria oo, muito menos mvc, e sim estruturado, so q usando classes...

 

o DBControl nao eh model, eh uma camada deabstracao do banco de dados...entenda o mvc eh uma arquitetura, onde ha outras e mesmo variacao, por exemplo

 

existe o 5 ties...

 

onde o model se transforma em bean, action e DAO, o bean trata apenas das caracteristicas de um objeto, e o DAO trata de acesso e crudo ao banco, o action faria a integracao entre os dois...claro q isto eh outro assunto...mas vamos supor q você faca apenas a troca de include

 

como o controler vai mostrar a view pra insercao?

 

cono o controller vai mostrar a view pra atualizacao?

 

como ele vai processar os dados pra cada operacao acima citada? esta acao você ja fez...

Compartilhar este post


Link para o post
Compartilhar em outros sites

@igor, concordo que meu "MVC" tá mais pra um "pseudo MVC"...O que prova que estou ainda me precipitando em assimilar os conceitos de MVC...E levantadas as suas questões, estou sem a mínima condição de começar a construir uma view e um controller...Acho pelo menos que no que diz respeito aos models, estou melhor encaminhado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@luis, isto aki nao eh curral, eh um espaco de trocas de ideias, ok? por favor respeite os demais membros....nao seja indulgente...

Vo bate cabeça com voce prq ja percebi que voce deve te algum problema =X

 

Eu dei uma idea simples pro cara eu não so graduado em programação nem tenho os conhecimentos que voce tem.. so Autodidata igual muita gente aqui..

 

Eu não queria fugi do assunto do topico mais tem hora né que complicado=X

Quiz so da um idea pro cara.. Mais bem, parece que voce fica ofendido qndo outra pessoa da palpite no seu 'TOPICO'.

 

se deveria pensa em ajuda mostrado a forma mais certa .. Ao invez de fica rebatendo a opnião de outras pessoas..

Depois ta com -40 de reputação e fica reclamando na index do Forum que não sabe o prq!

 

meu exemplo foi superficial apenas isso..

 

como o controller vai mostra insercao e atualizacao .. No meu caso tenho uma classe que cuida de renderiza o HTML (forms input, select ..) basta eu instancia ela no controller configura o form - se tiver id o form carrega os dados e muda açao do botão pra update!

 

eu uso 2 controller principais =X . Um cuida das Acoes e o outro cuida das views.. sei se isso foge do paradigma MVC não, mas e assim q faço =X

 

a duvida dele e duvida de muitos (inclusive a minha ja que ainda to aprendendo o conceito), ja que voce sabe perfeitamente como proceder .. Prq não mostra um exemplos pra todos..

Compartilhar este post


Link para o post
Compartilhar em outros sites

@igor, tópico encerrado! Retomarei as leituras internet a fora para adaptar meu código ao padrão MVC de fato. Não tomarei o vosso tempo com explicações conceituais que estão espalhadas aos montes na internet.

 

Espero em breve voltar para colaborar com respostas e não só com questionamentos.

 

Muito obrigado pela atenção de todos que responderam com correções e sujestões. Uma ótima tarde e "véspera" de final de semana a todos. =D

 

@luis, você foi ignorante dizendo q você faz o q você kizer, isto eh obvio nao precisa ficar dizendo isto, eu tb sou autodidata, e mostrei de forma clara sim, o topico nao eh meu..o seu exemplo foi bem fora de contexto, palavras existem, dizem muita coisa, e sim, você poderia confundir o membro...o forum existe pra trocar ideias, vender scripts prontos (como você pediu) eh em outro forum....e nao fala de minha reputacao nao, pq existem mais topicos pessoas agradecendo do q você ajudando...nao gostou ignore, eh o minimo q você pode fazer...apenas odeio indulgencias, ignorancias, e sacanagens...nao gostou, ker falar algo, manda por mp, eh regra do forum, eu apenas devolvi a você o q você me deu...aprenda a ler e veja q o errado eh você...

 

 

@atomic, fico feliz em ter ajudado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.