DibiRow a našeptávání v NetBeans
- exist
- Člen | 2
Byl jsem okolnostmi donucen napsat aplikaci v PHP a vybral jsem si na pomoc
Nette a Dibi. Jsem hodně zmlsaný Visual Studiem a jazykem C# a proto mi teď
dost chybí našeptávání v NetBeans. Něco se mi sice podařilo rozjet
s pomocí komentářů určujících typ, ale něco mi stejně pořád
nejde.
Je vůbec možné nějak získat našeptávání pro následující věc?
Mám model:
<?php
class PokusModel extends Object
{
/** @return DibiResult */
public function GetData()
{
return dibi::select("*")->from("kategorie")->execute();
}
}
?>
A presenter:
<?php
class HomepagePresenter extends BasePresenter
{
/** @var PokusModel */
protected $model;
public function __construct()
{
$this->model = new PokusModel();
}
public function renderDefault()
{
echo $this->model->GetData()->fetch()->nazev;
}
}
?>
Tabulka je s názvem „kategorie“ a má mimo jiné i sloupec s názvem „nazev“. Jde získat našeptávání pro ten „nazev“?
Pak ještě varianta kdy bych použil další třídu:
<?php
class Kategorie extends DibiRow
{
public function EchoNazev()
{
echo $this->nazev;
}
}
?>
A k věcem v modelu bych přidal:
<?php
return dibi::select("*")->from("kategorie")->execute()->setRowClass("Kategorie");
?>
Můžu získat někde v presenteru našeptávání pro metodu „EchoNazev()“?
<?php
public function renderDefault()
{
$this->model->GetData()->fetch()->EchoNazev();
}
?>
Předem díky za rady.
- h4kuna
- Backer | 740
Ahoj,
- echo $this->model->GetData()->fetch()->nazev; našeptání tabulek spíše ne, pač fetch opravdu neví jak máš stavěnou db
- Můžu získat někde v presenteru našeptávání pro metodu „EchoNazev()“?
ano,
<?php
$db = dibi::getConnection();
$db->setRowClass('Kategorie');// tím nebude vracet DibiRow ale Kategorie
?>
uprav si příslušné anotace a doplň pro metodu EchoNazev
- Filip Procházka
- Moderator | 4668
Jak říká kolega, částečným řešením jsou vlastní třídy pro data, ale brzy narazíš na to, že je čím dál složitější, pokud máš složitý join.
Netbeans tohle neumí na tak vysoké úrovni, umí našeptávat jenom co mu řekneš v phpDoc
class KategorieModel extends Nette\Object
{
/**
* @return array of Kategorie
*/
public function findAll()
{
return dibi::select('*')->...->setRowClass('Kategorie')...->fetchAll();
}
}
- Filip Procházka
- Moderator | 4668
Co jsem viděl u kolegů tak phpEd je třeba ještě horší v tomhle :) a nic slušného neznám. Možná nějaké proprietální rešení s licencí za stovky dolarů :)
- Filip Procházka
- Moderator | 4668
Ale můžu ze zkušenosti potvrdit, že to není problém, když si píšeš vlastní mappery a repozitáře a pěkně si všude píšeš phpDoc.
Není to „tak hrozné“ jenom je to trochu nepříjemné v cyklech a šablonách. To prostě není dotažené. Jinak jsou fazole vcelku použitelné. Je to o zvyku a taky potřebě trochu ten svůj kód znát :)
- Nox
- Člen | 378
Přijde mě že tady prostě Netbeans nemá odkud brát informace a toto by prostě imho nefunguvalo ani ve Visual Studiu, jak by mělo vědět co za pole bude ten vytvořený objekt mít, jak tipnout že to souvisí s DB jaký tabulky jsi při vytvoření joinoval, jaký sloupce's vybral … ? Jediný co může dostat je třídu objektu, která sama ale tyto pole nemá
Leda by to podporovalo manuální doplnění polí v returnu, ale to bys musel v anotaci ručně popsat strukturu
Editoval Nox (25. 2. 2011 9:39)
- Filip Procházka
- Moderator | 4668
Netbeans umí pracovat s databází a při psaní SQL našeptávat tabulky a sloupce. Mělo by tedy stačit, nějak mu říct, že má jako prvky pole nějaké funkce našeptávat sloupce nějaké tabulky, „jenom“.