Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ZF - Problemi i diskusija

[es] :: PHP :: ZF - Problemi i diskusija

Strane: << < .. 7 8 9 10 11 12

[ Pregleda: 33803 | Odgovora: 229 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.static.kdsinter.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: ZF - Problemi i diskusija09.02.2011. u 11:46 - pre 159 meseci
Lose prosledjujes parametre:

Code (php):

$this->callu()-> update(array('bot','1'), array('user_id = ?', $bid));
 


promeni u:

Code (php):

$this->callu()-> update(array('ime_kolone_1' => 'bot', 'ime_kolone_2' => '1'), array('user_id = ?', $bid));
 
 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: ZF - Problemi i diskusija09.02.2011. u 11:49 - pre 159 meseci
jaooo da , blam :S

e sad se vratio na moj prvi problem sa bind-om :)
 
Odgovor na temu

357_97

Član broj: 53056
Poruke: 104
*.dynamic.sbb.rs.



+5 Profil

icon Re: ZF - Problemi i diskusija05.03.2011. u 01:39 - pre 159 meseci
Posto vidim da ovde ima dosta ljudi koji drzi ZF u malom prstu da htedoh da priupitam kako je sledece moguce izvesti u Zendu.

Hteo bih da imam jednu akciju koja bi mogla da se poziva iz bilo kog kontrolora ili akcije, a sama akcija nesme biti direktno dostupna putem linka. Ovo je najlakse objasniti ako pretpostavimo da na nekom site-u imamo sidebar ciji se sadrzaj menja u zavisnosti od kontrolera ili akcije koja je pozvana, a izlaz te akcije zavisi od parametra koji je prosledjen. Naprimer negde zelimo da se u sidebar-u ispise prvih 10 naslova, na drugom 5 itd.

Do sada sam uspeo sve da odradim sem da zabranim direktan pristup akciji koja ce se koristiti na vise mesta (index/sidebar). Takodje sam slucajno otkrio da ako pozovem neku akciju za prefiksom [_] , a pri tome postoji akcija bez prefiksa zend mi baca sledeci exception - Zend_View_Exception. No ako pozovem nepostojecu akciju sve radi ok, tj. dobijam 404 gresku koja je ocekivana.

Code:
# view/scripts/layout.tpl
...
echo $this->action('sidebar', 'index', null, array('name' => 'Jack'));
echo $this->layout()->content;
...

Code:
# view/scripts/index/sidebar.tpl
...
<div id="sidebar">
    Sidebar data: <?=$this->sidebar_data;?>
    Sidebar name: <?=$this->name;?>
</div>
...

Code:
# IndexController.php
...
    public function sidebarAction()
    {
        $this->view->sidebar_data = '_sidebarAction()';
        $this->view->page_title = 'Sidebar Page Title';

        $this->view->name = $this->getRequest()->getParam('name', 'John');
//        $this->_redirect('index/index'); # Kad skinem ovaj komentar kod ulazi u beskonacnu petlju
    }

    public function indexAction()
    {
        $this->view->page_title = 'indexAction Page Title';
    }
...


Naravno ovo je uproscen kod. Sidebar bi trebalo da poziva neki model i da vrati rezultat koji bi se iskoristio na vise mesta u aplikaciji!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.rs.



+33 Profil

icon Re: ZF - Problemi i diskusija05.03.2011. u 17:44 - pre 159 meseci
Imaš potpuno pogrešan pristup... Zašto ta logika oko sidebar-a treba da bude akcija?

Napravi view helper koji će biti zadužen za ispis tog sidebar widget-a, i onda ga u layout-u pozivaj ovako nekako: echo $this->sidebar();. E sad, ako sadržaj koji u njemu treba da se ispisuje zavisi od trenutnog request-a (modul/kontroler/akcija), tim podacima možeš da pristupiš preko Zend_Controller_Front::getInstance()->getRequest()->getParams(), ili pojedinačno: get[Module|Controller|Action]Name(). Pritom, nije preporučljivo da view layer ima dodira sa kontrolerskom logikom, tako da bi bolja varijanta bila da svaki taj kontroler, u odgovarajućoj akciji (ili odma' u init() metodu) prosledi view-u nešto preko čega posle taj view helper može da "shvati" o kom kontroleru/akciji se radi, tako što će da očita vrednost te assign-ovane promenljive preko $this->view. Naravno, to $this->view ćeš imati jedino u slučaju da se taj tvoj helper izvodi iz Zend_View_Helper_Abstract.
 
Odgovor na temu

357_97

Član broj: 53056
Poruke: 104
*.dynamic.sbb.rs.



+5 Profil

icon Re: ZF - Problemi i diskusija06.03.2011. u 12:32 - pre 159 meseci
Citat:
Imaš potpuno pogrešan pristup... Zašto ta logika oko sidebar-a treba da bude akcija?

Bas zato sam hteo da pitam da li je to best practice. Tek pocinjem da radim u ZF pa mi je bila potrebna smernica. Uradio sam kako si rekao i sve radi kako treba. :-))

Citat:
Takodje sam slucajno otkrio da ako pozovem neku akciju za prefiksom [_] , a pri tome postoji akcija bez prefiksa zend mi baca sledeci exception - Zend_View_Exception. No ako pozovem nepostojecu akciju sve radi ok, tj. dobijam 404 gresku koja je ocekivana.


Da nemas neku ideju sta je razlog ovoga. Mozda pogresno podesena aplikacija ili ZF bug?! Izlaz koji dobijem je:
Code:
EXCEPTION_OTHER!

Exception: Zend_View_Exception
Message: script 'index/-simple.tpl' not found in path (C:/PHP Project/11 - Zend-Simple/trunk/application/views\scripts/)

#0 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\View\Abstract.php(876): Zend_View_Abstract->_script('index/-simple.t...')
#1 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\Controller\Action\Helper\ViewRenderer.php(897): Zend_View_Abstract->render('index/-simple.t...')
#2 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\Controller\Action\Helper\ViewRenderer.php(918): Zend_Controller_Action_Helper_ViewRenderer->renderScript('index/-simple.t...', NULL)
#3 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\Controller\Action\Helper\ViewRenderer.php(957): Zend_Controller_Action_Helper_ViewRenderer->render()
#4 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\Controller\Action\HelperBroker.php(277): Zend_Controller_Action_Helper_ViewRenderer->postDispatch()
#5 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\Controller\Action.php(523): Zend_Controller_Action_HelperBroker->notifyPostDispatch()
#6 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('simpleAction')
#7 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#8 C:\PHP Project\11 - Zend-Simple\trunk\application\Bootstrap.php(46): Zend_Controller_Front->dispatch()
#9 C:\PHP Project\11 - Zend-Simple\trunk\library\Zend\Application.php(366): Bootstrap->run()
#10 C:\PHP Project\11 - Zend-Simple\trunk\public\index.php(28): Zend_Application->run()
#11 {main} 
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.rs.



+33 Profil

icon Re: ZF - Problemi i diskusija06.03.2011. u 13:01 - pre 159 meseci
Pa ja mislim da je taj izuzetak kojeg dobijaš logičan... Prouči kako radi ViewRenderer action helper (klasa Zend_Controller_Action_Helper_ViewRenderer). Obrati pažnju koja pravila za filtriranje koristi njegov inflector (getInflector() metod). Kao što ćeš videti, akcija se provlači kroz ovaj set filtera: array('Word_CamelCaseToDash', new Zend_Filter_PregReplace('#[^a-z0-9' . preg_quote('/', '#') . ']+#i', '-'), 'StringToLower'). Pre svega toga, primeti da ViewRenderer provlači akcjiu kroz dispatcher-ov (Zend_Controller_Dispatcher) _formatName() metod, koji pravi PHP-friendly name, brišući sve ne-alfanumeričke karaktere. Dakle akcija će biti evaluirana kao ta bez prefiksa, ali ime view script-a će biti pogrešno.

Probaj da izbegavaš takve situacije...
 
Odgovor na temu

357_97

Član broj: 53056
Poruke: 104
*.dynamic.sbb.rs.



+5 Profil

icon Re: ZF - Problemi i diskusija06.03.2011. u 15:42 - pre 159 meseci
Jos jednom hvala na pomoci! Sad cu da pogledam to.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.rs.



+33 Profil

icon Re: ZF - Problemi i diskusija06.03.2011. u 15:48 - pre 159 meseci
Mada možda si i u pravu kad kažeš da je to bug, jer ako sam te dobro razumeo, ti nemaš deklarisanu akciju sa donjom crtom kao prefiksom, već samo tu neku standardnu, a ipak kad u browser-u uneseš site.com/ime-kontrolera/_ime-akcije, umesto očekivane "Not found" greške dobijaš taj izuzetak, koji govori da je ZF-ov dispatch-er ipak pronašao pravu akciju (a ne bi trebao), ali je problem što nema view script-a koji odgovara imenu te (nepostojeće) akcije.
 
Odgovor na temu

357_97

Član broj: 53056
Poruke: 104
*.dynamic.sbb.rs.



+5 Profil

icon Re: ZF - Problemi i diskusija06.03.2011. u 16:03 - pre 159 meseci
Bas tako.
 
Odgovor na temu

357_97

Član broj: 53056
Poruke: 104
*.dynamic.sbb.rs.



+5 Profil

icon Re: ZF - Problemi i diskusija16.07.2012. u 08:53 - pre 142 meseci
Je l se susreo neko mozda sa sledecim problemom. Napravio sam route koje se prevode tako da se prilikom posete adresa
/archive
/moja-arhiva
poziva 'module' => 'default', 'controller' => 'index', 'action' => 'test'. E sad tu se javlja problem. Ja zelim da kad neko poseti /archive i zatrazi prevod za neki key da dobije prevod za taj jezik. Trenutno to neradi kako treba, a uspeso sam da utvrdim da ce se koristiti razlicit locale u zavisnosti kako je definisem za rutu
Code:

Zend_Controller_Router_Route::setDefaultTranslator($translator); # postavlja prvi definisan locale  - en

Kad posetim linkove imam sledeci izlaz
/archive
month
/moja-arhiva [pogresno]
/moja-arhiva
/moja-arhiva

/moja-arhiva
month [pogresno]
/moja-arhiva
/moja-arhiva
/moja-arhiva

Ono sto ja ocekujem je da /archive sastavi link /archive umesto /moja-arhiva, a da /moja-arhiva za prevod ispise mesec.

A ako uradim ovako
Code:

Zend_Registry::set('Zend_Translate', $translator); # postavlja poslednji dodat locale - sr


/archive
mesec [pogresno]
/moja-arhiva [pogresno]
/moja-arhiva
/moja-arhiva

/moja-arhiva
month
/moja-arhiva
/moja-arhiva
/moja-arhiva

Engleska ruta vuce pogresan prevod i link, a na srpskoj je sve ok!?

Evo i koda
Code:

# bootstrap
$option_adapter = array('adapter' => Zend_Translate::AN_ARRAY);
$option_en = array(
    'content' =>
        array(
            'archive' => 'archive',
            'year'    => 'year',
            'month'   => 'month',
            'index'   => 'index'
        ),
    'locale' => 'en'
);
$option_sr = array(
    'content' =>
        array(
            'archive' => 'moja-arhiva',
            'year'    => 'godina',
            'month'   => 'mesec',
            'index'   => 'indeks'
        ),
    'locale' => 'sr'
);

$translator = new Zend_Translate(array_merge($option_en, $option_adapter));
$translator->addTranslation($option_sr);

// Ovde se koristi jedan od 2 nacina
//   Zend_Registry::set('Zend_Translate', $translator);                  # postavlja poslednji dodat locale - sr
//   Zend_Controller_Router_Route::setDefaultTranslator($translator); # postavlja prvi definisan locale  - en

$router = Zend_Controller_Front::getInstance()->getRouter();

$route = new Zend_Controller_Router_Route(
    '@archive',
    array(
        'module'      => 'default',
        'controller' => 'index',
        'action'     => 'test'
    )
);

$router->addRoute('route-name', $route);

$route->assemble(array('@locale'=>'en'));
$route->assemble(array('@locale'=>'sr'));


Code:

# .../index/test.phtml
    echo $this->translate('month') . '<br><br>';
    echo $this->url(array(), 'route-name') . '<br>';
    echo $this->url(array('@archive' => 'archive'), 'route-name') . '<br>';
    echo $this->url(array('@archive' => $this->translate('archive')), 'route-name');

 
Odgovor na temu

[es] :: PHP :: ZF - Problemi i diskusija

Strane: << < .. 7 8 9 10 11 12

[ Pregleda: 33803 | Odgovora: 229 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.