Diskuze: MVC architektura
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 19 zpráv z 19.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Model ti vrátí akorát to pole. Ve View si pak můžeš udělat metodu, která ti z těch dat vykreslí tu tabulku.
Např.
// Model
public function getData()
{
return $this->db->fetchAll("SELECT * FROM `table`");
}
// View
private function renderTable()
{
$data = $this->model->getData();
$r = "";
$r .= "<table>";
foreach ($data as $key => $val) {
$r .= "<tr><th>{$key}</th><td>{$val}</td></tr>"
}
$r .= "</table>";
return $r;
}
public function __toString()
{
return "..." . $this->renderTable();
}
Záleží, jak přesně vypadá View (zda je to nějaká třída nebo šablona).
Ano, v modelu tahám data z databáze a dám si je do pole. Dále mám podobnou metodu, která mi z toho pole udělá tabulku.
Jenže mi nejspíše trochu splívají pojmy "Pohled(View)" a "Šablona".
Z toho co jsem se dočetl, se View jako třída nemá používat, dokonce se
na žádnou třídu ani nemá přímo odkazovat...
Tak jak používat View jinak než šablonu?
View je vrstva, která data zobrazí. Jako viewer můžeš mít i normální
PHP třídu, ale nejčastěji se používají šablony.
Kdybych kód, co jsem postnul, hodil do šablony, vypadalo by to třeba
takhle:
// Model zůstane stejný
// Controller
public function renderPage()
{
$this->template->data = $this->model->getData();
}
// šablona
<table>
{foreach $data as $key => $val}
<tr><th>{$key}</th><td>{$val}</td></tr>
{/foreach}
</table>
Jasně, ale když to vezmu na základě tohodle seriálu, tak kam s metodou VytvorTabulku, když všechny Pohledy jsou prakticky šablony?
Já nevím, proč pokládáš takové zbytečné otázky, když se to dále v seriálu všechno ukazuje.
Pokládám takovou otázku, protože jsem na to v celém seriálu nenarazil, případně jsem to z něj nepochopil.
Nenarazil jsem tady ani na práci s komponentami a ani na vytváření tříd v pohledu.
A jelikož je na internetu mnoho vysvětlení MVC architektury a tahle se mi zdála nejlepší, tak se ptám tady s nadějí že mě někdo nakopne.
V literatuře je pořád co se nesmí a nemá, ale ukázku praktického použití lze najít těžko.
Seriál tvoří funkční web v MVC architektuře, takže úplně nechápu,
jak jsi v něm mohl nenarazit na tak základní věc, jako je práce s
komponentami Promiň, ale
jsem jen člověk a asi nejsem dostatečně silný na to, abych se ti to snažil
vysvětlovat. Napsal jsi takové nesmysly, že jsi snad nečetl ani ten úvodní
díl. Přečti si to prostě znovu a ten web si naprogramuj, potom to
pochopíš.
Ano opět jsem se špatně vyjádřil, myslel jsem externí komponenty nebo jak to nazvat - já si to bez předešlých znalostí nazval prostě knihovny (jQuery,TinyMCE a jiné).
Každopádně, nečekal jsem, že mi to budeš zrovna ty vysvětlovat, protože je nepřéhlednutelné, jaký máš přístup k "nováčkům", jen jsem marně doufal že se někdo slituje a aspoň mi naznačí ve které části se řeší něco podobného.
Nikdo se neslituje, protože co tady předvádíš nemá hlavu ani patu. Až položíš srozumitelnou otázku, tak dostaneš srozumitelnou odpověď. Pokud nejsi schopný pochopit zdejší MVC seriál, tak jdi na jednodušší seriály, jako PHP nebo OOP v PHP. Všechno tady je a spoustu lidí se z toho naučilo, takže se budeš muset asi více snažit.
Ano mé dotazy jsou nejspíš hloupé, ale tvůj postoj je na tom dle mého
názoru hůř...
V každém případě tě obdivuji, kolik toho umíš naprogramovat a je dobře
že se věnuješ tomu co ti jde a né práci s lidmi
Ale rozhodně se tu nechci s tebou hádat, takže na tvé vyjadřování na mou osobu budu brát již nebudu brát v potaz.
Jen si stále myslím, že ve tvém seriálu jsou pouze tři komponenty, s čímž si nevystačím a to byla podstata mých otázek, se kterými se teda obrátím na někoho jiného.
Díky za pomoc a rady
Ach jo. Kdyby jsi pořádně chápal OOP nebudeš se ptát. Je jedno jestli pracuješ s komponentou Galerie, Kontaktní formulář. Všude to je stejné. Odpověděl bych ti i já úplně stejně. Sdracem to opravdu není.
Tobě opravdu není pomoci, tak trochu jsem doufal, že konečně zkonstruuješ nějakou otázku. Prací s lidmi se živím, takže to jsi trochu nestrefil. Jak se říká, chytrému napověz, hloupého kopni.
Šablona není přímou součástí vieweru, je jen jejím doplňkem. Viewer je normální objekt.
To záleží na konkrétní implementaci frameworku, třeba v místním seriálu žádný viewer není. Tohle je přesně proč nemám rád nesmyslné dotazy pod články, teď tu řešíme viewer pod seriálem, ve kterém ani není. A diskuze bude mást lidi, co ho budou číst.
Diskuzi jsem přesunul ze seriálu do samostatného vlákna.
No když už jsem to tu tak rozvášnil, tak to zkusím ještě jednou a snad lépe.
Podle všech pouček má být v architekruře MVC kód HTML pouze v Pohledu(View).
Takže když si chci ulehčit práci a mít možnost zautomatizovat vypsání tabulky do kteréhokoli pohledu touto funkcí:
public function VytvorTabulku($data)
{
$tabulka = "<table id='x' class='y'>\n<thead>\n";
$tabulka .= "<tr>\n";
// přidání hlavičky
foreach ($data[0] as $key => $useless){
$tabulka .= "<th>$key</th>\n";
}
$tabulka .= "</tr>\n</thead>\n<tbody>\n";
// vypsání dat
foreach ($data as $row){
$tabulka .= "<tr>\n";
foreach ($row as $key => $val){
$tabulka .= "<td>$val</td>\n";
}
$tabulka .= "</tr>\n";
}
// uzavření tabulky
$tabulka .= "</tbody>\n</table>\n";
return $tabulka;
}
Mám vytvořit nový pohled, který bude třídou a v ní bude tato funkce?
Nebo vytvořit nový pohled jako šablonu a do ní napsat něco takového:
<table id="x" class="y">
<thead>
<tr>
<?php foreach ($data[0] as $key => $useless){
echo "<th>$key</th>\n";
}
?>
</tr>
</thead>
<tbody>
<?php foreach ($data as $row){
echo "<tr>\n";
foreach ($row as $key => $val){
echo "<td>$val</td>\n";
}
echo "</tr>\n";
}
?>
</tbody>
</table>
Nebo je zase všechno špatně a já se můžu jít zahrabat?
Podle mě (každý si - bohužel - vykládá MVC trošičku jinak) záleží
jak máš tu architekturu udělanou. Buď máš View jako šablony nebo jako
třídy + s šablonou. Tj že má i různé funkce. Každopádně volil bych
druhou možnost, tj udělat šablonu a do ní šablonovou syntaxi PHP
HTML patří jen do šablony, ve funkcích nemá co dělat, pokud to není nějaký helper, ale o to se zatím nemusíš starat. Ten druhý kód dává trochu smysl, ten první není MVC, ale právě ta špageta, které se chceš vyvarovat.
Zobrazeno 19 zpráv z 19.