Propojeni aplikace s Android app

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

Ahoj chtel bych se zeptat jak by jste resili propojeni jiz hotove aplikace pro web s Android aplikaci. Je mi celkem jasne jak udelat zabezpeceni a overovani. A take asi nebude problem s tim v presenteru rozpoznavat odkud prisel Request a podle toho posilat bud do template nebo pres JSON. Ale kde vidim problem, v pouziti Nette\Database, protoze na urovni Presenteru jeste neznam data, ktera potrebuji odeslat. Protoze mam i v templatu pouzite funkce na \Nette\Database\Table\Selection. Jedna se o vetsi aplikaci s cca 100 sablonama, takze se mi moc nechce vsechno prepisovat. Existuje nake reseni jak to obejit, nebo si budu muset poupravit sablony, popripade vytvorit specialni sablony pro Android a pouzit treba XML, nebo nake dalsi tridy ktere mi predpripravi data do JSONu? Predem dekuji za jakoukoliv radu ci zkusenosti.

Michal Vyšinský
Člen | 608
+
0
-

Čeho chceš dosáhnout?
Tahat některá data z webu do Android aplikace? – udělej si REST API
Udělat z webu „nativní“ aplikaci? – použil bych WebView

akadlec
Člen | 1326
+
+2
-

to jako vážně provádíš selecty atd až v šabloně????

saimons
Člen | 293
+
-3
-

Michal: Jasne jak pises, Rest Api si klidne udelam, to by nemel byt problem, jen je problem ze ty data kompletni, mam az v templatu. Podivam se na to WebView. ale na slozitost te aplikace to asi nebude uplne idalni.
Akadlec: No Predavam \Table\Selection do sablony a pak kdyz potrebuju treba pristoupit pres FK k nake dalsi tak to mam napsane v sablone. Usnadnilo to dost praci, nez si vsechny data predpripravovat v Modelu, dokonce to tak driv bylo i v tutorialech. Ty si vsechno pripravujes uz v modelu a do templatu predavas jen treba pole?

Editoval saimons (11. 2. 2015 13:23)

Mysteria
Člen | 797
+
-5
-

@saimons: Dělám to stejně, základní data z modelu jako Selection a dodatečná data vybírám až v šabloně pomocí related a ref. Například, články vyberu v modelu, jeho tagy pomocí related v šabloně. Zdá se mi to mnohem pohodlnější než v modelu dělat ohromný pole se všema možnýma dopňujícíma informacema co bych mohl potřebovat a předávat ho šabloně.

Pavel Kravčík
Člen | 1196
+
+2
-

@Mysteria: Osobně nejhezčí mi přijde řešení pomocí entity (pseudoEntit).

//šablona

$article->id;
$article->title;

$tags = $article->getTags();

foreach($tags as $tag)
{
	$tag->title;
}

//entita
public $id;
public $title;

public function getTags()
{
	$tags = $this->record->related('tags');
	return EntityCollectionTags($tags); //nebo foreachem plnit jiné entity)
}

Pokud dáš ref do šablony a uděláš to na deseti místech. V budoucnu se budeš proklínat, pokud bys třeba rád něco změnil na tom výpisu. Pokud to dáš o úroveň výše, tak to změníš jen někde v modelu a všech deset template se to změní automaticky. To asi @akadlec myslel.

saimons
Člen | 293
+
+1
-

Takze kdyz to tak ctu, tak jsem v haji a nezbude mi nic jineho nez ty veci, ktere chci posilat preprogramovat tak abych to mel formou entit. :(

akadlec
Člen | 1326
+
+2
-

Ano, šablona je od toho aby zobrazovala a ne něco počítala, načítala, hledala…kdybys toto řešil o úroveň výše tak bys teď nemusel řešit problém že data máš připravené až v samotné šabloně.

Pavel Kravčík
Člen | 1196
+
0
-

@saimons: Nemusíš ani entity. Stačí třeba pole nebo proměnná v templates. Pak stačí tohle:

public function renderEditovat($id)
{
	$this->template->article = $model->getArticle($id);
}

Ale tenhle problém, který řešíš teď, může nastat i v budoucnu. Takže si tím ušetříš čas. Můžeš to udělat i „rychleji“. Napiš si nějaký jednoduchý parser a prožeň jím ty šablony a nahraď, co bys nahrazoval ručně.

$sablona = str_replace('$article = $selection->findBy()', '$article', $sablona);
Mysteria
Člen | 797
+
+1
-

@kzk_cz: Nějak v tomhle nevidím žádný rozdíl:

$article->id;
$article->title;
$tags = $article->getTags(); // vs. $tags = $article->related('tags');
foreach($tags as $tag) {
    $tag->title;
}

Respektive vidím v tom případě, že jak píšeš, kdyby to tam bylo Xkrát na různých místech, ale když to tam bude jednou? Prostě tohle mě osobně zavání stylem cpát to úplně nejlepší řešení do jakéhokoliv projektu, přestože to prostě vzhledem k jeho rozsahu a podobně není potřeba, ne?

Samozřejmě se nebavíme o tom psát v šablonách něco jako $article = $selection->findBy(‚…‘), to je jasný, že tohle by tam nemělo co dělat. Bavíme se čistě o related.

saimons
Člen | 293
+
0
-

Jojo hlavnim problem je v tom, ze tam pouzivam ref a related. Je to docela velky projekt, takze v jedne sablone se pracuje treba s deseti tabulkama. Takze bych rad nasel nakou doopravdy spravnou cestu, kdyz uz to budu predelavat. Ocenim i naky odkaz na priklad.

Pavel Kravčík
Člen | 1196
+
+2
-

@Mysteria: Já naopak docela podstatný.

Já vím, že $getTags() mi nevrátí nic nestandartního. U $article->related(‚tags‘) tomu nevěřím. A pokud se změní klíč například, tak abych hledal někde po šablonách, co se kde dělo.

Mysteria napsal(a):
přestože to prostě vzhledem k jeho rozsahu a podobně není potřeba, ne?

Kódu je to v obou případech stejně, jeden řádek. Takže nevím, proč by to mělo být složitější nebo rozsáhlejší. :)

Mysteria
Člen | 797
+
+1
-

@kzk_cz: Super, to s těma klíčema je dobrý příklad. Díky za vysvětlení.