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

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

 

CakePHP - vlastní CRUD nad tabulkou II.

Google       Google       30. 7. 2007       13 492×

Posledně jsme se něco málo naučili s funkcí findAll, dnes se podíváme dále, na funkci find a dokončíme náš ukázkový příklad, který jednoduše manipuluje s daty v tabulce.

Reklama
Reklama

Na závěr minulého dílu jste měli možnost přečíst si o funkci findAll, která sestaví dotaz, jenž vybere z tabulky všechny záznamy odpovídající podmínce, pořadí a limitu. Cake má opravdu mocné funkce, toto byl ale pouze slabý začátek.

Nyní se podívejme, jak by asi mělo vypadat zavolání funkce findAll pro náš příklad:

$pages = $this->Page->findAll( null, null, array("title", "id") );

Tímto vybereme všechny záznamy, všechny jejich sloupce a setřídíme je nejdříve podle jejich titulku a v  případě shody podle jejich unikátního id.

Funkce modelu find

V minulém dílu jsme si navrhli všechny kostry funkcí, které je třeba. Naším požadavkem po funkci view je, aby zobrazila jeden příspěvek podle unikátního id, které pomocí URL předáme. Řešení je následující:

function view($id) {
	$page = $this->Page->find( array("id" => $id) );
	
	$this->set("page", $page);
}

Abychom si mohli udělat lepší představu o struktuře funkce find, uveďme si její přesnou definici:

Model::find(
	$conditions = null,
	$fields = null,
	$order = null,
	$recursive = null
)

Funkce vrací jeden řádek z db. Jako výsledek je předáno pole. Parametry se zadávají ve stejném formátu jako u funkce findAll, viz minulý díl o Caku.

Parametry:

  • array – $conditions – pole s SQL podmínkou
  • mixed – $fields – řetězec s názvem sloupce, nebo pole požadovaných sloupců
  • string – $order – pole nebo řetězec se jménem sloupce pro řazení; pokud chcete řadit naopak, připojte ke sloupci sekvenci znaků " DESC"; tedy například: "title DESC"
  • int – $recursive – číslo určující míru rekurzivity, ale o tom někdy jindy

Návratová hodnota:

  • array – pole záznamů tabulky

Myslím, že View funkce view (soubor view.ctp) (jen se do těch názvů nezamotejme) zvládnete určitě levou zadní. Pro jistotu uvádím možný obsah tohoto souboru.

<h1><?php echo $page["Page"]["title"] ?></h1>

<h3>Autor: <?php echo $page["Page"]["author"] ?></h3>

Obsah stránky:
<p><?php echo $page["Page"]["content"] ?></p>

Funkce modelu delete

Tato funkce patří mezi ty jednoduší, napíšeme zde pouze tři příkazy, a to následující:

function delete($id) {
	$this->Page->delete($id);
	$this->redirect('index');
	exit;
}

Využili jsme další funkce Modelu, a to funkci delete. Klasicky si ji představme:

Model::delete(
	$id = null,
	$cascade = true
)

Odstraní záznam příslušného id. Pokud není id předáno, využije se stávající id natavené Modelu.

Parametry:

  • mixed – $id – id – primární klíč mazaného záznamu

Návratová hodnota:

  • boolean – při úspěchu true

Metoda redirect (přesměrování)

Další novinkou je metoda redirect Controlleru. Je to velmi užitečná funkce, která za nás automaticky generuje hlavičky pro přesměrování. Jako parametr se předává řetězec podle následujících možností:

  • Pokud chceme přesměrovat pouze na jinou funkci aktuálního controlleru, zadáme pouze její název.
  • Pokud potřebujeme přesměrování i na jiný Controller, zadáme URL ve tvaru: /controller/function.

Důležité je to lomítko na začátku, které v předchozím případě záměrně chybělo!

Volání exit není povinné, ale silně ho (i vývojáři) doporučuji. Vzhledem k tomu, že provádíme za každé okolnosti redirect, není nutné mít vytvořený soubor *.ctp.

Zastávka bokem: Router

Nyní to, co jsme již udělali, upravíme do trochu hezčí podoby. V tuto chvíli, když přejdete na URL /, tedy bez /pages, vidíte pouze hlášku o chybějícím controlleru. Je to proto, že jsme Caku vymazali informace o výchozím controlleru. Tyto informace jsou uloženy v souboru /config/routers.php. Editujte tedy tento soubor, aby vypadal asi takhle:

<?php
	Router::connect('/', array('controller' => 'pages'));
?>

Myslím, že není moc co vysvětlovat, pro tuto chvíli to stačí.

Layout

Dalším velmi „neefektním“ problémem je to, že stránky jsou obaleny „Cake vzhledem“, který zrovna taky není žádný zázrak.Vytvoříme tedy náš layout, obal, který bude používat každá stránka. Výchozí layout má tuto adresu: /views/layouts/default.ctp. Tento soubor musíte vytvořit. Vložte do něj vámi požadovanou HTML kostru a pomocí PHP do něj vepište dvě nutné proměnné:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
	<title><?php echo $title_for_layout ?></title>
	<style type="text/css" media="screen">
		table { width:100% }
		th {
			background-color:#F2F2F2;
			border-color:#FFFFFF rgb(187, 187, 187) rgb(187, 187, 187) rgb(255, 255, 255);
			border-style:solid;
			border-width:1px;
			text-align:center;
		}
	</style>
</head>
<body>
	<?php echo $content_for_layout ?>
	<hr />
</body>
</html>

Proměnné $title_for_layout a $content_for_layout vkládají nastavený titulek, respektive obsah výstupu šablony controlleru. Do ukázkového kódu jsem přidal trochu CSS, aby výstup nebyl tak strohý.

Opět se nám do šablony vložil výpis dotazů na SQL server. Považuji tento výpis při vývoji aplikace za užitečný, jeho vypnutí lze provést nastavením Cake debug módu na <2. Ti bystřejší si možná toto nastavení najdou, ale já ho zatím doporučuji ponechat zapnuté.

Vylepšujeme /views/pages/index.ctp

Zatím přiděláváme funkce, ale je nutno na ně vytvořit i jednotlivé odkazy. Proto nyní upravíme hlavní pohled controller pages, což je soubor /views/pages/index.ctp. Doporučuji asi následující úpravu:

<h1>Uložené stránky</h1>
<?php echo $html->link('Přidat stránku', 'add') ?>
<table>
	<tr>
		<th>Id</th>
		<th>Titulek</th>
		<th>Autor</th>
		<th>Obsah</th>
		<th>Akce</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>
		<td>
			<?php echo $html->link('Zobrazit', 'view/'.$page['Page']['id']) ?>
			<?php echo $html->link('Editovat', 'edit/'.$page['Page']['id']) ?>
			<?php echo $html->link('Smazat', 'delete/'.$page['Page']['id']) ?>
		</td>
	</tr>
	<?php } ?>
</table>

V tomto opraveném kódu se ocitly nové odkazy, které jsme vygenerovali pomocí helperů. A helpery jsou naše nová kapitola.

Helpery

Jak již z názvu vyplývá, helpery jsou tu proto, aby nám pomohly. Onen generovaný odkaz není, pravda, moc velká úspora práce, ale to je jen semínko. Využili sme metody link objektu html. Cake obsahuje helpery také např. pro Ajax, JS, RSS, XML. Pomocí nich budeme generovat dokumenty jako na běžícím páse! Představme si metodu link:

$html->link()

HtmlHelper::link (
	$title,
	$url = null,
	$htmlAttributes = array(),
	$confirmMessage = false,
	$escapeTitle = true	 
	)

Funkce vytvoří HTML odkaz. Pokud URL začíná http://, zachází se s ním jako s externím odkazem. Jinak zde platí stejná pravidla jako u funkce redirect. Pokud chceme „zůstat v působnosti“ stejného controlleru, $url nesmí začínat /, pro jiný controller zvolte $url ve formátu /controller/action. Pokud je $url prázdné, použije se namísto něj $title.

Parametry:

  • string – $title – obsah vložený do tagu
  • mixed – $url – relativní URL Caku, nebo pole parametrů, případně externí URL začánající http://
  • array – $htmlAttributes – pole HTML atributů
  • string – $confirmMessage – javascriptová zpráva pro potvrzení
  • boolean – $escapeTitle – Má se escapovat $title?

Návratová hodnota:

  • string – odkaz – tag <a>

Pro ukázku rychle využijeme parametr $confirmMessage, který se nám hodí k našemu odkazu Smazat.

<?php echo $html->link('Smazat', 'delete/'.$page['Page']['id'], null, "Jste si jisti, že chcete stránku smazat?") ?>

A to bude pro dnešek všechno. Máme vše připraveno, abychom přístě využili helper $form a dokončili tak zbývající funkce controlleru pages, na které jsme si už připravili i odkazy.

×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.

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 JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá první nonstop veřejně dostupnou digitální dílnu světového formátu s vybavením za 3 miliony korun. Dílnu může využívat po registraci kdokoliv. V  prostorách vzniknou prototypy produktů místních startupů, projekty kutilů a studentů i umělecká díla. Cílem dílny je zpřístupnit veřejnosti drahé přístroje a přitáhnout více podnikavých lidí k technickým oborům.

Reklama
Reklama
Obrázek ke článku Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

Obrázek ke článku České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace (CRA) pořádají druhý ročník CRA IoT Hackathonů. Zájemci z řad vývojářů a fanoušků moderních technologií mohou změřit své síly a během jediného dne sestrojit co nejzajímavější funkční prototyp zařízení, které bude komunikovat prostřednictvím sítě LoRa. CRA IoT Hackathony se letos uskuteční ve dvou fázích, na jaře a na podzim, v různých městech České republiky. Jarní běh se odstartuje 31. března v Brně a 7. dubna v Praze.

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ý