Jump to content
php.lv forumi

jatājums par ZEND framework


php newbie
 Share

Recommended Posts

Sveiki.

 

Mēģinu uztaisīt lapeli izmantojot ZEND. Esmu iesācējs gan PHP, gan ZEND. Neieskaitot "Hello World" tā būs mana pirmā zend lapele.

 

Uztaisiju layout'u un tagad domāju, kurp labāk iebāzt menu. Būs 2 menu: adminam un lietotājam. Ir doma ielikt to layout'ā un pārslegt, ja ir ielogojies admins. Vai nu var taisīt 2 layout'us adminam un lietotājam. Otra ideja man patīk labāk, bet tad es nezinu kā pārslēgt layout'u control'u grupai t.i. lai nevajadzētu katra admin kontrola initā rakstīt change layout. Vai nu ir cits variants - taisīt admin paneli pavisam atsevišķi kā citu aplikāciju.

 

Varbūt kāds ZEND zinītis var sniegt kadu padomu šajā sakarā?

Link to comment
Share on other sites

es neko nezinu par zend, taču admin panelis tiešām ir atsevišķa web applikācija. gan frontend webs, gan backend webs abi izmanto kopīgu db, bet tā savādāk katrs no tiem ir kkas pats par sevi, tb neatkarīgi kā applikācijas

Link to comment
Share on other sites

labi, taisu kā atsevišķu aplikāciju.

 

izmainot zend aplikācijas struktūru man tagat .htaccess ir root folderī

 

izskatās šādi:

 

SetEnv APPLICATION_ENV development

 

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]

RewriteCond %{REQUEST_FILENAME} -l [OR]

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]

RewriteRule ^.*$ index.php [NC,L]

 

 

īsti nezinu ko viņš dara, bet viss ta ka iet caur index.php. Man vajadzētu tādu kā exception, lai admin folderi procesētu normāli, jo tajā būs vēl viena aplikācija un tajā būs tads pats index.php un .htaccess

Link to comment
Share on other sites

Es daru, vadoties pēc tā, kā jau 2easy pateicis. Admin daļa ir cita aplikācija, kopīga ir tikai db un datu modeļi (par ko vēl neesmu drošs, vai publiskajai daļai neveidošu citādus modeļus, ar akcentu uz ātrdarbību).

 

Bet, ja taisa kā vienu aplikāciju ar admin moduli, tad layoutu pārslēgšanai izmanto Zend_Layout_Controller_Plugin_Layout, piemēram, katram modulim atbilstošu layoutu uzliek šādi:

 

// library/My/Controller/Plugin/LayoutSwitcher.php

class My_Controller_Plugin_LayoutSwitcher extends Zend_Layout_Controller_Plugin_Layout
{
   public function preDispatch(Zend_Controller_Request_Abstract $request)
   {
       $this->getLayout()->setLayoutPath(
           Zend_Controller_Front::getInstance()->getModuleDirectory(
               $request->getModuleName()
           ) . '/views/layouts'
       );
       $this->getLayout()->setLayout('layout');
   }
}

// application.ini

resources.frontController.plugins.LayoutSwitcher = "My_Controller_Plugin_LayoutSwitcher"

 

(iespējams, mazliet savādāk, jo rakstu no galvas, tikai idejai..)

 

Vienmēr, kad rodas doma, ka katrā kontrolierī jātaisa vienāda funkcija, ir vērts padomāt par citu risinājumu. Tā saucamais princips "don't copy, extend". ja visos kontrolieros vajag kaut ko iekš preDispatch, utt.., tad ieteicams to pārnest uz pluginiem (vai arī extendot Zend_Controller_Action klasi).

 

Ja neesi neko daudz ar PHP ņēmies, novēlu izturību un pacietību, bet, no otras puses, varbūt arī labi, ka uzreiz domāt atbilstoši OOP un freimworkam.

Edited by Mr.Key
Link to comment
Share on other sites

Es daru, vadoties pēc tā, kā jau 2easy pateicis. Admin daļa ir cita aplikācija, kopīga ir tikai db un datu modeļi (par ko vēl neesmu drošs, vai publiskajai daļai neveidošu citādus modeļus, ar akcentu uz ātrdarbību).

 

Bet, ja taisa kā vienu aplikāciju ar admin moduli, tad layoutu pārslēgšanai izmanto Zend_Layout_Controller_Plugin_Layout, piemēram, katram modulim atbilstošu layoutu uzliek šādi:

 

// library/My/Controller/Plugin/LayoutSwitcher.php

class My_Controller_Plugin_LayoutSwitcher extends Zend_Layout_Controller_Plugin_Layout
{
   public function preDispatch(Zend_Controller_Request_Abstract $request)
   {
       $this->getLayout()->setLayoutPath(
           Zend_Controller_Front::getInstance()->getModuleDirectory(
               $request->getModuleName()
           ) . '/views/layouts'
       );
       $this->getLayout()->setLayout('layout');
   }
}

// application.ini

resources.frontController.plugins.LayoutSwitcher = "My_Controller_Plugin_LayoutSwitcher"

 

(iespējams, mazliet savādāk, jo rakstu no galvas, tikai idejai..)

 

Vienmēr, kad rodas doma, ka katrā kontrolierī jātaisa vienāda funkcija, ir vērts padomāt par citu risinājumu. Tā saucamais princips "don't copy, extend". ja visos kontrolieros vajag kaut ko iekš preDispatch, utt.., tad ieteicams to pārnest uz pluginiem (vai arī extendot Zend_Controller_Action klasi).

 

Ja neesi neko daudz ar PHP ņēmies, novēlu izturību un pacietību, bet, no otras puses, varbūt arī labi, ka uzreiz domāt atbilstoši OOP un freimworkam.

 

esmu nēmies ar PHP, bet nedaudz.

 

Paldies. Tā ideja ar Zend_Controller_Action extendošanu iepatikas, bet jau uztaisīju kā citu aplikāciju un laikam pie ta arī palikšu. Nākotnei ļoti noderēs.

Edited by php newbie
Link to comment
Share on other sites

  • 2 weeks later...

It kā uztaisiju login skriptu. Skripts caur Zend_Auth izveido sesiju ar identifikāciju. Bet tagad īsti nezinu kur labāk glabāt pazīmi ka tas ir admins. Vai nu ar Zend_Acl kaut kā setapot lietotāju grupas, bet man tik sarežģīti nevajag. Vai nu pašam taja sesijā pieglabāt to pazīmi. Vai 3. variants kuru es arī izmantoju - saglabāt iekš auth storage

 

$storage = $auth->getStorage()->read();
$storage['role'] = 'admin';
$auth->getStorage()->write($storage);  

 

īsti nezinu kadam nolukam to storage izmanto un vai ir pareizi tajā saglabāt admina pazīmi.

Edited by php newbie
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...