DibiRow a našeptávání v NetBeans

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
exist
Člen | 2
+
0
-

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
+
0
-

Ahoj,

  1. echo $this->model->GetData()->fetch()->nazev; našeptání tabulek spíše ne, pač fetch opravdu neví jak máš stavěnou db
  2. 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
+
0
-

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();
	}
}
exist
Člen | 2
+
0
-

HosipLan napsal(a):

Netbeans tohle neumí na tak vysoké úrovni

Je něco, co to umí na tak vysoké úrovni?

Filip Procházka
Moderator | 4668
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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