Ad occhio il Model gestisce l'intera parte "M Model" del sistema senza sezionarne le competenze quindi può essere corretto come approccio.
Un modulo può aver bisogno di altri moduli per operare. Se pensi anche solamente ad un "nodo" (contenuto)
il modulo "Node" potrebbe usare il modulo "Tag" per la selezione dei tags da associare al nodo, oppure il modulo "User" per sapere a che utente appartiene.. ect ect..
Ok mi è chiarissimo.
Anche se c'è da dire che spezzando il Model in sub-pack avresti una gestione migliore del sistema (SRP)
Ok presumo che questa articolazione la potro trovare in un vero framework.
Tipo Synfony?
Ho già provveduto a creare una vm con ubutu e configurare lamp inziando con la guida synfony2 di html.it mi sembra ben fatto.
Ma volevo iniziare con un progettino già pronto che permettesse di afferrare bene in concetto mvc, pur basilare che possa essere.
La view globale è "iniettata" per aggregazione al controllore che in questo modo la può modificare a piacimento
ok chiaro, presumo ti riferisca proprio a questa riga di codice giusto?
Sarebbe il controller principale dell'applicazione
Codice PHP:
class Controller
{
function __construct()
{
Session::init();
// user has remember-me-cookie ? then try to login with cookie ("remember me" feature)
if (!isset($_SESSION['user_logged_in']) && isset($_COOKIE['rememberme'])) {
header('location: ' . URL . 'login/loginWithCookie');
}
// create database connection
try {
$this->db = new Database();
} catch (PDOException $e) {
die('Database connection could not be established.');
}
// create a view object (that does nothing, but provides the view render() method)
$this->view = new View();
}
E presumo che " $this->view = new View();" utilizzi sempre i __set magico che crea al volo la proprietà.
Ulteriore domanda sta nel prossimo punto.
è una funzione normale della view, si fa tramite i magic methods __get e __set
daje e studia!!!
Ok li conoscevo quei metodi, anche se non li avevo mai usati.
Però mi aspettavo che fossero dichiarati esplicitamente in questo modo :
Codice PHP:
public function __set($name, $value) {
$this->$name = $value;
}
A questo punto mi viene solo da pensare che funzion ano anche se non sono dichiarati esplicitamente, in quanto queste righe di codice non ci sono.
---------------------------------------------------------------------------------------------------------------------------------------------
Risposte a Santino
Posso sapere perchè si chiama LoginModel ma usa delle cose da "Controller" come un "view"? E' il framework che usa questa nomenclatura? Se si, cambia framework
E infatti hai ragione, quello che ho chiamato LoginModel, in realtà è il controllore del Login che istanzia il model che si occupa della comunicazione col db...
Azz non si può sbagliare niente

Sicuramente non lo chiamo framework perchè non lo è ma secondo me è molto semplice da capire e modificare (e mi pare abbastanza corretto come è impostato), utile per la prima esperienza mvc.
Detto questo: LoginModel che è? :F
Anche io sono d'accordo con te (sempre sperando che stiamo pensando alla stessa cosa).
Preferivo avere non un login_controller, login_model, login_view... ma un user_controller, user_model, user_view(di cui una era la login).
Ma in questo caso è statu strutturato come se il login fosse un'entità.
Poco male (almeno dal mio punto di vista profano), me lo tengo cosi (anche se all'interno del login_model l'ho modificato integrando una classe user, che sicuramente dal tuo punto di vista sarà un accrocchio terribile, ma non avevo voglia di modificare tutto il login, me lo tengo e pace)
Parallelamente sto cercando di costruire degli oggetti in modo più corretto ES
una delle entità è negozio, il quale deve avere un metodo per la registrazione degli incassi percui :
Codice PHP:
class shop extends Controller
{
function __construct()
{
parent::__construct();
}
function writeIncassi()
{
$this->view->render('shop/incasso');
}
function writeIncassi_action()
{
$shop_model = $this->loadModel('shop');
$write_successful = $shop_model->writeIncasso();
if ($write_successful == true) {
header('location: ' . URL . 'login/index');
} else {
header('location: ' . URL . 'login/register');
}
}
}
Codice PHP:
class shopModel
{
/**
* Constructor, expects a Database connection
* @param Database $db The Database object
*/
public function __construct(Database $db)
{
$this->db = $db;
}
/**
* writeIncassi
* @return bool success state
*/
public function getShops()
{
// write new users data into database
$sql = "SELECT * FROM negozi";
$query = $this->db->prepare($sql);
$query->execute();
$result = $query->fetchAll();
return $result;
}
public function writeIncasso()
{
//non ti indico tutto il pippone ma qui faccio la scrittura in base al $_POST sul db
Ti riporto per completezza uda delle view... quella per l'incasso... poi ne seguiranno molte altre.
Codice PHP:
<div class="content">
<!-- echo out the system feedback (error and success messages) -->
<?php $this->renderFeedbackMessages(); ?>
<div class="incassi-default-box">
<h1>Registra il tuo incasso</h1>
<!-- register form -->
<form method="post" action="<?php echo URL; ?>shop/writeIncassi_action" name="incassiform">
<!-- the user name input field uses a HTML5 pattern check -->
<label for="incassi_input_data">
Data
</label>
<input id="incassi_input_data" class="incassi_input" type="text" name="data" value="<?=date("d/m/Y")?>" required /><br />
<label for="incassi_input_numeroClienti">
Numero Clienti
</label>
<input id="incassi_input_numeroClienti" class="incassi_input" type="text" pattern="[0-9]" name="num_clienti" required /><br />
<label for="incassi_input_contanti">
Contanti
</label>
<input id="incassi_input_contanti" class="incassi_input" type="text" pattern="[0-9]" name="contanti" required /><br />
<label for="incassi_input_carteCredito">
Carte di Credito
</label>
<input id="incassi_input_carteCredito" class="incassi_input" type="text" pattern="[0-9]" name="carte_credito" required /><br />
<label for="incassi_input_assegni">
Assegni
</label>
<input id="incassi_input_assegni" class="incassi_input" type="text" pattern="[0-9]" name="assegni" required /><br />
<label for="incassi_input_trattamenti">
Trattamenti
</label>
<input id="incassi_input_trattamenti" class="incassi_input" type="text" pattern="[0-9]" name="trattamenti" required /><br />
<label for="incassi_input_prodotti">
Prodotti
</label>
<input id="incassi_input_prodotti" class="incassi_input" type="text" name="prodotti" required /><br />
<input type="submit" name="writeIncassi" value="Invia Dati" />
</form>
</div>
</div>
in definitiva dopo tutto questo pippone.
Quello che ho interpretato come poco corretto è quello che pensavi anche tu?
Il mio modo di proseguire ha una parverza di essere corretto????