Spíš základy OOP a tvorby aplikace
- Tirus91
- Člen | 199
Vím že dle některých to sem nebude patřit, ovšem na djpw mi nikdo
neodpovídá a osobně se nemám na koho obrátit.
Zkoušel jsem si pročíst několik zdrojů a dokumentace, ovšem nebyl jsem
o moc moudřejší.
Tak k věci:
V tuto chvíli mám presenter s metodou List v této podobě
public function renderList($id = null) {
if (!$this->user->isAllowed('AdminUsers')) {
$this->error($this->translator->translate('messages.error.sufficientPermissions'), \Nette\Http\IResponse::S403_FORBIDDEN);
}
$sessionData = $this->getSession(self::SEARCH_USER_BOX_NAME);
$users = $this->adminUserManagerModel->getUserList($sessionData->where);
if (!$users) {
$this->template->userList = array();
} else {
$vp = new \VisualPaginator\VisualPaginator($this, 'usersPaginator');
$paginator = $vp->getPaginator();
$paginator->itemsPerPage = $this->systemInformation->number_posts_admin_view;
$paginator->itemCount = count($users);
$this->template->userList = $users->fetchAll($paginator->offset, $paginator->itemsPerPage);
}
}
a následně getUserList obsahuje toto
public function getUserList($where = array()) {
$result = array();
$sql = array();
$sql[] = 'SELECT
' . self::COLUMN_ID . ',
' . self::COLUMN_ROLE . ',
' . self::COLUMN_EMAIL . ',
' . self::COLUMN_USERNAME . ',
' . self::COLUMN_SURNAME . ',
' . self::COLUMN_FIRST_NAME . ',
' . self::COLUMN_ACTIVATED . ',
' . self::COLUMN_REGISTERED_AT . ',
' . self::COLUMN_LOGGED_AT . ',
' . self::COLUMN_EMAIL_ENABLE . ',
' . self::COLUMN_MIDDLE_NAME . ',
' . self::COLUMN_PHONE . ',
' . self::COLUMN_WEB . ',
' . self::COLUMN_YOUTUBE . ',
' . self::COLUMN_GOOGLE . ',
' . self::COLUMN_FACEBOOK . ',
' . self::COLUMN_SKYPE . ',
' . self::COLUMN_IRC . ',
' . self::COLUMN_AVATAR . '
FROM security_users WHERE 1=1';
if (count($where) > 0) {
if (isset($where['role'])) {
$sql[] = ' AND (';
$tmp = array();
$i = 1;
foreach ($where['role'] as $role) {
$sql[] = ($i > 1 ? ' OR ' : null) . 'role = %s ';
$sql[] = $role;
++$i;
}
$sql[] = ')';
}
foreach ($where as $key => $value) {
if ($key == self::COLUMN_EMAIL || $key == self::COLUMN_USERNAME) {
$sql[] = ' AND ' . $key . ' LIKE %~like~';
$sql[] = $value;
}
}
}
return $this->database->query($sql);
}
Ovšem toto mi nepříjde jako nejlepší návrh. Jak řešit toto
filtrování? (využívám dibi)
Znám jen lidi co programují v C apod.. Bylo mi doporučeno si napsat nějaký
interface apod. Ovšem zde je asi největší kámen úrazu. OOP osobně
neovládám na nejlepší úrovni, ale již nějakou třídu co má hlavu a patu
dokážu sepsat.
Pokud bychom tu došli k závěru (ale i kdyby ne), poradil by mi někdo
jak na to?
Zkusil jsem to nějak následovně, ale opět nevím moc jak dál (zas budu
vděčnej už jen za nakopnutí)
<?php
interface IArticle {
public function find($id);
public function create($data);
public function delete($id);
public function edit($id,$data);
public function findAll();
}
class Story implements IArticle {
public function find($id){
return $this->database->query('SELECT * FROM story WHERE id = %i',$id)->fetch();
}
public function create($data){
}
public function delete($id){
return $this->database->delete('story')->where(array('id=%i'=>$id));
}
public function edit($id,$data){
}
public function findAll(){
return $this->database->query('SELECT * FROM story');
}
}
Děkuji za jakoukoliv radu(nakopnutí) ke správnému návrhu