[MVC(CI)] Model vs view

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ger van Steenderen
Tutorial mod

Ger van Steenderen

01/05/2013 19:10:29
Quote Anchor link
Zoals de meesten van jullie inmiddels weten werk ik daar waar mogelijk met één query.
Nu heb ik het zo, dat in het model het resultaat wordt omgezet in een array per item.
Mijn gevoel zegt dat dit de juiste manier is, maar ik vraag me af of mijn gevoel goed is.
 
PHP hulp

PHP hulp

04/02/2023 16:58:26
 
Wouter J

Wouter J

01/05/2013 19:18:21
Quote Anchor link
Goed, dit wordt een beetje een onwennig reactie, omdat ik normaal gesproken met Symfony2 en doctrine2 werkt. Waarin je praat over Entities (bijv. Author) en Repositories (bijv. AuthorRepository), ik ga ervan uit dat Repository ong. gelijk aan een Model is.

Maar wat ik dus altijd zou doen is een object teruggeven in de Model. Je zet een database result om in een object. Mocht je functies hebben als findAll*(), dan geef je een array met objecten terug.
 
Erwin H

Erwin H

01/05/2013 19:22:40
Quote Anchor link
Los van het framework (ik neem aan dat je CodeIgniter gebruikt ivm de CI) is wat mij betreft het zo dat het model de data ophaalt en het in een standaard formaat teruggeeft aan de controller, of direct aan de view. Dat betekent dat het de taak is van het model om eventueel verkregen data om te vormen naar het standaard formaat als dat niet het geval is. In elk geval zou de view niet meer moeten gaan bedenken hoe de data in elkaar steekt, die moet gewoon een databrok krijgen waar mee gewerkt kan worden.

Hoe precies je databrok eruitziet is volgens mij aan jou, hoewel daar dan mogelijk je framework bij komt kijken. Ik ken niet genoeg van CI om daar iets zinnigs over te zeggen. In mijn eigen framework gebruik ik een resultset container die er altijd voor zorgt dat de data eenvoudig door de view kan worden verwerkt. Die container wordt gevuld door het model en soms zijn daar enige stappen voor nodig om de data er op de juiste manier in te krijgen.

Tenzij ik je vraag niet goed begrepen heb natuurlijk....
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

01/05/2013 19:32:31
Quote Anchor link
Ik weet niet precies hoe doctrine werkt, maar volgens mij zitten er niet zoveel verschillen in met de db classes van CodeIgniter.

Maar wat is jouw motivatie dan om een object c.q array van objecten mee te geven?
Puur om in de OOP gedachte te blijven?

Toevoeging op 01/05/2013 19:42:50:

@Erwin, ik had jouw reactie nog niet gelezen.
Maar je hebt me goed begrepen, en ik denk wat bij jou de container is, is bij mij de controller die dan weer wat doorgeeft aan de view)
Gewijzigd op 01/05/2013 19:43:26 door Ger van Steenderen
 
Bart V B

Bart V B

01/05/2013 21:50:41
Quote Anchor link
Nu houd ik niet zo van hifi wifi taal, maar database met codeigniter is eenvoudig.
Wat ik altijd doe is het volgende:

model
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

class some_model extends CI_Model
{
  function
GetUser( $id )
  {

     $Ssql = "SELECT foo, bar FROM table WHERE id = '". $this->db-> escape_str($id)."' ";

     return $this->db->query($Ssql);
  }
}

?>


Controller
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

class foo extends CI_Controller
{
   public function index()
   {

      $this->load->model('some_model');
      $data['user'] = $this->some_model->GetUser($this->uri->segment('2'));
      $this->load->view('user_view', $data);
   }
}

?>


De view
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php foreach( $users->result() as $row ) : ?>
<p><?php echo $row->foo; ?></p>
<p><?php echo $row->bar; ?></p>
<?php endforeach; ?>


Dus eenvoudig gezegd je controller geeft wat in het model staat door aan je view.

EDIT:
paar typos in de code.
Gewijzigd op 01/05/2013 21:53:39 door Bart V B
 
Wouter J

Wouter J

01/05/2013 23:04:40
Quote Anchor link
Quote:
Maar wat is jouw motivatie dan om een object c.q array van objecten mee te geven?
Puur om in de OOP gedachte te blijven?

ja, dat ook. Maar ook omdat je dan extra methods kunt toevoegen en zo toegang krijgt tot dingen die niet in de DB staan, zoals fullname terwel de DB alleen firstname en lastname bevat.
Gewijzigd op 01/05/2013 23:05:52 door Wouter J
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/05/2013 08:41:32
Quote Anchor link
De situatie is als volgt:
Ik heb bv product A, dit product is beschikbaar in diverse kleuren, iedere kleur heeft zijn eigen image(s) en beschikbaarheid qua afmetingen (afhankelijk van de voorraad).
De opdrachtgever wilt dat als een bepaalde kleur gekozen wordt de plaatjes van die kleur getoond worden en de beschikbare maten voor die kleur, indien mogelijk zonder het opnieuw inladen de pagina.
Dit is overigens allemaal gelukt, maar ik heb het nu zo dat ik in het model zelf het resultaat van de query doorloop, ombouw naar een werkbaar geheel en dan teruggeef naar de controller.
De vraag is of dat de juiste werkwijze is.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.