MVC ispravno koristiti model

Pozdrav!

Koristim CodeIgniter framework znam da se u modelu radi sa bazom podataka al opet ne znam šta stavljat u model a šta u contorller.

Evo naprimjer skripta za potvrdu registracije (aktivacijski email)

models

Dali je ovo pravilno uradjeno?

Hvala

Po mojem razmišljanju u php-u je model sam po sebi suvišan jer je PHP slabo tipizirano jezik, pa su onda tu ubacili model gdje ćeš kao dohvatiti podatke, ali nema mi to baš nekog smisla. S time da to pričam s aspekta asp.net MVC-a i MVC arhitekture, u php-u se nisam previše zamarao MVC arhitekturom, ali uglavnom sad kad sve povežem smatram da je u PHP-u model suvišan. Jer model bi ustvari trebao biti model (objekt koji želiš prenijeti iz controllera u view)

tacno je suvisan ovaj model ovo se sve može u contolleru radit

U php ti postoji dva pristupa u odnosu Controller i Model.
U jednom gdje model samo služi za držanje podataka i komuniciranje sa bazom (ovo je dosta česta primjena) a drugi je gdje Controller ima samo ulogu routera u aplikaciji a sva logika je modelu, ukljućujući i spajanje na bazu.
Ako je sva logika u modelu onda se spajanje na bazu i držanje podatka odvaja od poslovne logike.

U slučajevima gdje se u modelu nalazi poslovna logika, view osim template zna sadržavati i klase koje pripremaju sadržaj za template.
To se radi zato jer tome nema mjesta u poslovnoj logiki. Lijepi primjeri ovog pristupa su ti Joomla i Magento.

No većina tutoriala na webu za rad u frameworcima koristi model samo za objektni pristup bazi te držanje podatka dok je ostatak koda u controlleru i pomoćnim klasama (te pomoćne klase bi mogli smatrati dio modela).

Mislim da je tvoj kod u redu. Sada smatram da je ipak bolji pristup da je logika u modelu. Zadnji godinu dana sam isključivo radio sa takvim pristupom i mislim da je to puno bolje (bolje odvajanje koda, poslovna logika se može koristiti u drugim aplikacijama nije vezana za controller). Controller samo da ima ulogu određivanja toka aplikacije i logiku koju je potrebno ugraditi prije nego što tok aplikacije dođe u model.

Da.

Samo umjesto [php]$query = $this->db->query(“SELECT activated, validation_code FROM users WHERE id_user = $id_user LIMIT 1”);[/php]

stavi

[php]$query = $this->db->select(‘activated, validation_code’)->where(‘id_user’, $id_user)->get(‘users’);[/php]

I umjesto ovog:

[php] $this->db->query(“UPDATE users SET activated = 1, ip_address = '” . $this->input->ip_address() . “’ WHERE id_user = $id_user LIMIT 1”);[/php]

ovo:

[php]$set = array(
‘activated’ => 1,
‘ip_address’ => $this->input->ip_address()
);

$where = array(
‘id_user’ => $id_user
);

$this->db->update(‘users’, $set, $where);[/php]

Nepotrebno je nešto pisati ako imaš gotove aplikacije za to :slight_smile: