Hej doszedlem do wniosku ze w moim fw widok, ogolnie warstwa prezentacji jako szablon to za malo, w sensie gdy zajdzie potrzeba na wyswietlenie innego fotmatu pdf,xml,text,csv czy json bedzie lipa i albo nie da rady albo bede musial kombinowac w kontrolerze i robic rzeczy ktorych nie powinno sie robic.
Wiec postanowilem poszerzyc fw o nowa funkcjonalnosc, oprocz widokow jako szablony mozna uzywac klasy.
Jednak nie wiem zabardzo jak to najlepiej rozwiazac do tej pory doszedlem do 2 sposobow:
-Osobna klasa widoku na kazdy format czyli News_View_Html,News_View_Xml itp...itd...
-Jedna ogolna klasa News_View implementujaca interfejs IView ktory ma metody: renderHtml,renderXml,renderJson itp..itd
Moze pokaze pseudo kod to bedzie bardziej wiadomo o co mi chodzi:
interface IView {
public function render();
}
//lub
interface IView {
public function renderHtml();
public function renderText();
public function renderXml();
public function renderJson();
public function renderPdf();
}
I potem reszta:
<?php
class News_View_Html extends Html_View implements IView {
public function render() {
return $this -> Layout('news', 'components', 'admin');
}
}
class News_View_Xml extends Xml_View implements IView {
public function render() {
//implemenctacja dla xml'a
}
}
//lub jedna klasa z metodami dla kazdego typu widoku dziedziczaca po bazowej klasie view + interfejs
class News_View extends View implements IView {
//implementacja assign'ow
public function setVars($vars) {
$this -> view -> AddVars($vars);
}
public function renderHtml() {
$this -> view -> Layout('news', 'components', 'admin');
}
public function renderXml() {
//implementacja dla xml'a
}
//potem implementacja dla text,pdf i json jesli jest potrzeba jak nie to puste metody
}
//klasa kontrolera
class News extends Controller implements IController {
public function Index() {
//pobieranie news'ow z modelu
//ustawiane widoku dla url index.php/Home,Index,Index,html
$args = $this -> routing -> getParams();
switch($args) {
case 'html':
//teraz tak albo osobna klasa dla kazdego widoku albo jedna klasa ze wszystkimi metodami
$view = $this -> News_View_Html;
$view -> AddVars($news);
return $view -> render();
//lub
$view = this -> News_View;
$view -> setVars($news);
return $view -> renderHtml();
break;
case 'xml':
//tutaj to samo tylko ze w formacie xml
break;
}
}
}
?>
Kod pisany na szybko z palca wiec moze sa jakies bledy, to ma byc tylko taki ogolny zarys.
Chodzi o to ktore rozwiazanie jest lepsze, a moze zadne z nich i proponujecie inne...?