CakePHP - hozzátéve, az új funkciók a modell vagy vezérlő

szavazat
0

Új vagyok a CakePHP és MVC fejlesztés és próbál létrehozni valamit CakePHP de nem tudja kitalálni, hogyan kell ezt csinálni:

Hozok létre egy egyszerű alkalmazás, amely szifilisz vesz albumok és dalok egyszerű adatbeviteli űrlapok. Megcsináltam a DB és használta a Cake konzol alkalmazást létrehozni az összes modell / vezérlők, stb, és jól működik. Tudom szifilisz mind albumok és dalok nem jelent problémát, és a dal táblázatot a DB van kötve az album asztal egy idegen kulcsot, így minden link és egyesületek vannak a modellben.

Amit akarok, hogy képes legyen kattintson egy albumot, és látni a dalok társított album, de nem vagyok biztos benne, hogyan kezdjen hozzá. Szükségem hozzáadni egy lekérdezést a modellben, vagy ez alkalmassága bemegy a vezérlő?

Az én veszi a következő: az album listán, hogy az album neve kapcsolatokat, amelyek szükségessé teszik a | viewAlbum | funkciót a Songs Controller a ALBUMID. Nem biztos, hogy hová menjen innen, bár ......

Tud valaki nekem pont a helyes irányba?

Cheers, Colm


@JohnP Köszönöm a válaszát. Hogyan hozható létre egy linket, hogy hívja ezt a funkciót a vezérlő mégis? Nekem van :

echo $html->link(__($album['Album']['title'], true), array('controller'=>'Songs', 'action'=>'viewAlbum', $album['Album']['id']));

Amennyiben viewAlbum a függvény nevét a dalok vezérlő. Van ötleted, hogy miért ez nem működik?

A kérdést 12/06/2011 13:17
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

Cake natív ORM már működik ez az Ön számára. Ha tényleg bemegy a nézet oldalon egy albumot, meg kell megmutatja az összes kapcsolódó dalok ott magától. Ez csak akkor működik, ha a telepítést a kapcsolatokat megfelelően.

Ha azt szeretnénk, hogy kódot ezt a viselkedést magad, akkor tesz egy viewSongsintézkedés a AlbumController. Ez a módszer megnézi az album ID átadott, és hívja a módszert (pl getSongsByAlbum($aid)) a Song modellben. Belül, hogy a módszer a dal modell lenne egy hívást, hogy úgy néz ki, mint valami

$opts = array(
   'conditions' => array(
       'album_id' => $aid
   )
);
return $this->find('all', $opts);
Válaszolt 12/06/2011 13:27
a forrás felhasználó

szavazat
0

protos -

Ha jól értem - az Ön által használt John példáját, és meg kell, hogy rögzítse a linket a véleményen van, hogy felhívja a vezérlő?

<?
echo $this->Html->link(__($album['Album']['title'], true), array('controller'=>'Album', 'action'=>'viewSongs', $id));

?>

John példáját elmagyarázta, hogyan kell létrehozni egy módszert a Albums vezérlő , azt üti a módszer az Énekek modell , hogy visszatért a kívánt eredményt.

Tehát a link célozná meg Album vezérlő, és intézkedéseket kell a vezérlő módszer.

Ez a módszer kevésbé van értelme a Songs vezérlő, mert szükség van egy album id . Csak azt akarja, hogy a vezérlő Album húzni kapcsolódó adatot az Énekek modell / tábla. John válasza teljesen helytálló, de talán túl bonyolult, ha csak most ismerkednek a Cake. John szét a szükséges funkciókat tegyen egy módszert a Song modell , az úgynevezett módszerrel a Albums vezérlő , amely húzza eredménye a nézet megjelenítéséhez.

Én váltás ezt a „kövér vezérlő”, ami könnyebb követni a rövid kódot, de kevesebb MVC.

Szüksége van egy hasMany kapcsolatot az Album dalok - minden album hasMany Songs:

// ../models/album.php

class Album extends AppModel {

    var $name = 'Album';

    var $hasMany = array(
        'Song' => array(
            'className' => 'Song',
            'foreignKey' => 'album_id'
        )
    );

A vezérlő akció fog kinézni:

// ../controllers/albums_controller.php

function viewSongs($id = null) {
    if(isset($id) && $id != null) {
        $albums = $this->Album->find('first',       
            array('conditions'=>array('Album.id'=>$id));
        $songs = $this->Album->Song->find('all', 
            array('conditions'=>array('Song.album_id'=>$id)));
        // This returns variables to the view to use
        $this->set(compact('albums', 'songs'));
    }
}

Ön szerint fogják hívni viewSongs.ctp, és akkor a következőképpen néz ki:

// ../views/albums/viewSongs.ctp

<?php 
foreach($albums as $album) {
    echo "<h2>{$album['name']}</h2>";
    echo "<ul>";
    foreach ($songs as $song) {
       echo "<li>{$song['Song']['name']}</li>"
    }
    echo "</ul>";
}

És a link ../views/albums/view.ctp lenne, mint:

<?php
echo $this->Html->link('View Songs', array('controller'=>'albums',
    'action'=>'viewSongs', $id));
?>
Válaszolt 13/06/2011 18:06
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more