CakePHP - vlastní CRUD nad tabulkou I.
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

CakePHP - vlastní CRUD nad tabulkou I.CakePHP - vlastní CRUD nad tabulkou I.

 

CakePHP - vlastní CRUD nad tabulkou I.

Google       Google       21. 7. 2007       12 802×

Minule nám Cake vytvořil jednoduché rozhraní pro práci s tabulkou. Dnes si vytvoříme první část vlastního tzv. CRUD rozhraní.

Reklama
Reklama

Takzvané „lešení“, které jsme si ukázali minule, bylo opravdu jen řešení pro začátky, kdy nemáme zatím přesně ujasněnou strukturu tabulky, přidáváme a odebíráme slupce apod. Dnes vytvoříme vlastní CRUD funkce, které nám budou obstarávat základní manipulaci s daty tabulky.

Pro začátek smažte z databáze minulou tabulku a vytvořte tuto novou:

CREATE TABLE `pages` (
  `id` tinyint(10) unsigned NOT NULL auto_increment,
  `title` varchar(100) character set utf8 collate utf8_czech_ci NOT NULL,
  `author` varchar(100) NOT NULL,
  `content` longtext character set utf8 collate utf8_czech_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stránky';

Spusťte si prohlížeč a přes controller pages, který jsme minule vytvořili, přidejte nějaké stránky do DB, abychom mohli potom s těmito daty pracovat.

Views

Pozorný čtenář si jistě všiml, že posledně jsme z modelu MVC nevyužili Views. Views – česky pohledy – za nás tehdy generoval Cake. Dnes si je už vytvoříme sami.

Controller – funkce

Budeme pokračovat na příkladu z minula s novou tabulkou z dneška. Otevřete soubor pages_controller.php a vymažte z něj definici proměnné $scaffold. Bez ní již Cake nebude nic automaticky generovat.

Nyní si nadefinujeme jednotlivé funkce, které budou odpovídat jednotlivým operacím s daty v tabulce. Asi nějak takhle:

<?php
class PagesController extends AppController
{
   var $name = "Pages";

   function index() { // bude zobrazovat seznam vsech stranek

   }

   function view($id) { // zobrazi jednotlive stranky

   }

   function add() { // prida stranku

   }

   function edit($id = null) { // upravi stranku
   
   }

   function delete($id) { // smaze stranku

   }

?>

Pro každou operaci jsme vytvořili jednu funkci, kterou lze zavolat přes URL, pomocí svého jména. Např. funkce add:
www.example.com/cake/pages/add.

Pokud nezadáme jméno funkce, volá se defaultně funkce index. Následující URL tedy vedou k volání stejné funkce (index):
www.example.com/cake/pages
www.example.com/cake/pages/index

Všimněte si, že jsme funkcím view, edit a delete definovali parametr $id. Pomocí něho funkci sdělíme jednoznačný identifikátor stránky, s kterou bude pracovat. Následující URL tedy zavolá funkci edit nad článkem s ID 3:
www.example.com/cake/pages/edit/3

Proč jsme u edit nastavili parametr id jako volitelný, si řekneme až později u rozboru této funkce.

Zpět k Views

Pokud neurčíme jinak (a mnohdy není vůbec třeba), tak bude platit jednoduché pravidlo, že každá funkce z každého controlleru má vlastní příslušný soubor View. View soubory se ukládají do složky app/views/xxxx a mají vždy přípony *.ctp. Složku xxxx nahradíme jménem příslušného controlleru, kterému je View soubor příslušný. Pravidla psaní velikosti písmen apod. nastudujte podle této tabulky:

URL Controller Model Tabulka View (jméno souboru)
pages/index Pages Page pages /pages/index.cpt
people/edit People Person people /people/edit.cpt
my_new_blogs/add MyNewBlogs MyNewBlog my_new_blogs /my_new_blogs/add.cpt

Cake obsahuje propracovaný převodník těchto jmen, a proto byste neměli mít u angličtiny problém. Jak vidíte v tabulce, uspějete i s nepravidelnými tvary množných čísel, apod. Velmi důležitá je správnost velikosti písmen, důkladně si principy z tabulky nastudujte.

Pro náš ukázkový příklad tedy vytvořte tyto soubory ve složce views/pages/:

  • index.ctp
  • view.ctp
  • edit.ctp
  • add.ctp

Soubor delete.ctp nevytvářejte, protože tato funkce nebude mít žádný výstup.

Funkce index

Jako první napíšeme funkci index. Potřebujeme jednoduše dostat z databáze všechny stránky a ty potom vypsat. O vypsání se nám postará View, o dotaz na DB Model a o propojení Controller. Funkce index bude vypadat následovně:

function index() {

   $pages = $this->Page->findAll();
   /*
      Do promenne pages jsme nacetli vsechny stranky ulozene v DB.
      
      Controller ma vzdy nacteny prislusny model tabulky podle jmena,
      tedy PagesController ma prislusny Model v $this->Page.
      Pokud by byl napr. NewsController, Model by mel nacten v $this->New.

      funkce findAll() vraci uplne vsechny radky v tabulce pages.
   */

   $this->set('pages', $pages);
   /*
     Pomoci funkce jsme zpristupnili promennou $pages pod stejnym jmenem
     pages ve View. Tato jmena se mohou lisit, ale doporucuji promennou ve
     View pojemnovat stejne jako v Controlleru.
    
     Pokud bychom tuto funkci nepouzili, nas predchozi dotaz by se "ztratil"
     a nemohli bychom jeho obsah ve View vypsat.
   */
}

Soubor views/pages/index.ctp je normální mix (X)HTML a PHP. Cake všechny výsledky dotazu na DB převádí do asociativního pole. Výpis tedy bude velmi jednoduchý. Zde je celý obsah index.ctp:

<h1>Uložené stránky</h1>
<table>
	<tr>
	    <th>Id</th>
	    <th>Titulek</th>
	    <th>Autor</th>
	    <th>Obsah</th>
	</tr>
	<?php foreach( $pages as $page) { ?>
	<tr>
	    <td><?php echo $page['Page']['id'] ?></td>
	    <td><?php echo $page['Page']['title'] ?></td>
	    <td><?php echo $page['Page']['author'] ?></td>
	    <td><?php echo $page['Page']['content'] ?></td>
	</tr>
	<?php } ?>
</table>

Procházíme proměnnou $pages po řádcích ($page). Proměnná $page obsahuje asoc. pole s indexem, který odpovídá jménu Modelu, proto tedy první index 'Page', index druhého pole odpovídá jménu sloupce v DB.

Výsledek by měl vypadat asi nějak takto:

Nelekejte se okolních informací. Námi vytvořený obsah je pouze v prvním bílém obdélníku. Ostatní layout můžeme také změnit, ale zatím se s ním spokojíme, protože nám může být užitečný, a to např. oním výpisem prováděných dotazů na DB. Samozřejmě tento výpis předpokládá, že jste si něco do tabulky uložili.

Dnes už nebudeme vytvářet další funkce, ale raději zaexperimentujeme s findAll(). Zde je dokumentace možných parametrů:

Model::findAll( $conditions = null,
		$fields = null,
		$order = null,
		$limit = null,
		$page = 1,
		$recursive = null	 
	)

Parametry:

  • mixed – $conditions – Podmínka pro SQL dotaz. Můžete ji zapsat:
    • jako normální SQL řetězec – např: "author LIKE 'honza'"
    • jako pole – array('author' => 'honza')
    $this->Page->findAll( array('author' => 'honza', 'id' => 2) );
        // je stejne jako: $this->Page->findAll( "author LIKE 'honza' AND id = 2 ");
  • mixed – $fields – Sloupce, které chceme vybrat. Platí zde stejný princip jako u podmínky, buď pomocí řetězce určete jeden sloupec, nebo pomocí pole zadejte více sloupců (array('author', 'title') – vybere pouze jméno autora a titulek).
  • string – $order – Řazení dotazu. Opět stejný princip (array('author', 'title') – seřadí nejdříve podle jména autora, potom podle titulku).
  • int – $limit – Limit vybíraných řádků
  • int – $page – Stránka, od které chcete vybrat data
  • int – $recursive – Číslo pro míru rekurzivity – využijeme až při vazbách v tabulkách n:1, m:n.

Zkuste si tyto příklady „naostro“ a nezapomeňte, že pokud vyberete jen určité sloupce, že můžete vypsat jenom je, ale ne už ty ostatní!

Přístě si dokončíme ostatní funkce a potom se můžete těšit na mini-video shrnující naše dosavadní poznatky. Potom budeme pokračovat samozřejmě dále.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

3 názory  —  3 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jan ŠkrášekHonza pracuje jako webdeveloper, věnuje se vývoji Nette\Database a Nextras komponentám. Mnoho času věnuje komunitnímu portálu signály.cz. Honza je taky fanouškem XML technologií.
Web     Twitter    

Nové články

Obrázek ke článku Blockchain & Bitcoin konference

Blockchain & Bitcoin konference

V pátek 19. 5. 2017 se v pražském konferenčním centru Andel’s konala Blockchain & Bitcoin konference. Řada odborníků a podnikatelů v oboru blockchainu a kryptoměn představila možnosti budoucího směřování tohoto oboru. Speakeři většinou rusky mluvící provenience prezentovali řešení svých firem založená na technologii blockchainu.

Reklama
Reklama
Obrázek ke článku Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Bezpečnostní tým Cisco Talos odhalil celkem 4 kampaně dosud neobjeveného malwaru, který dostal jméno KONNI. Ten se dokázal úspěšně maskovat od roku 2014. Zpočátku se malware zaměřoval pouze na krádeže citlivých dat. Za 3 roky se ale několikrát vyvinul, přičemž jeho současná verze umožňuje útočníkovi z infikovaného počítače nejenom krást data, ale i mapovat stisky na klávesnici, pořizovat screenshoty obrazovky či v zařízení spustit libovolný kód. Pro odvedení pozornosti oběti zasílali útočníci v příloze také obrázek, zprávu a výhružkách severokorejského režimu či kontakty na členy mezinárodních organizací.

Obrázek ke článku Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Trend Micro, celosvětový lídr v oblasti bezpečnostních řešení a VMware, přední světový dodavatel cloudové infrastruktury a řešení pro podnikovou mobilitu, oznámily výsledky výzkumu mezi českými a slovenskými manažery zodpovědnými za ochranu osobních údajů, který zjišťoval, jak jsou připraveni na nové nařízení o ochraně osobních údajů (GDPR). Většina firem v České republice a na Slovensku nad 100 zaměstnanců je již s novým nařízením GDPR obeznámena. Výzkum provedený ve spolupráci s agenturou Ipsos ukázal, že téměř 8 firem z 10 o nařízení ví, přičemž jeho znalost je o něco vyšší na Slovensku (89 %) než v České republice (69 %).

Obrázek ke článku Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Jeden z nejznámějších ransomwarů, Locky, se vrací. Po většinu roku 2016 patřil mezi nejrozšířenější vyděračské softwary. Ke svému šíření využíval emailové kampaně s infikovanými přílohami. Ransomware Locky byl rozesílán prostřednictvím botnetu (internetový robot zasílající spamy) Necurs. Jeho aktivita na konci roku 2016 téměř upadla a spolu s ní i šíření ransomwaru Locky. Před několika týdny se Necurs opět probudil a začal posílat spamy nabízející výhodný nákup akcií. Dne 21. dubna zaznamenal bezpečnostní tým Cisco Talos první velkou kampaň ransomwaru Locky prostřednictvím botnetu Necurs za posledních několik měsíců.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý