Zend Framework

Nemrég kezdtem el használni a ZF-et, és mivel szeretem összeírni mit hogyan oldok meg, létrehoztam ezt a fórumot.

A helyesírásomat ne fikázd, tudom hogy szörnyü, ez van sajnos, hiába olvasok 12 éves korom óta baromi sok sci-fit, az írásom nem javul.

Lelkes weblap fejlesztő vagyok, nem értek a dizájnhoz, elboldogulok vele, de nem az én asztalom, a programozást viszont egyenesen imádom.

Remélem már nem tartozom a szakmában a pistikék közé, de még profinak sem nevezném magam, lelkes haladó osztályt választom :)

Ha valamire kíváncsi vagy, segítség kell php jacascript html css témakörben ( ne kérj tőlem olyat hogy ezt csináld meg nekem pls ) csak kérdezz bátran. Értelmes vitákba is szívesen bonyolódom, tágítsuk nézeteinket.

Címkék

code (1) doctrine (2) etc (2) module (1) security (1) users (1) zf (4) Címkefelhő

Friss topikok

Zend Form , html kód beszúrása

2010.03.24. 23:27 Mokacuka

Időbe telett, mire találtam egy szép, egyszerü és jó megoldást arra, ha két form elem közé html kódot akarok beszúrni. Eleinte a description-t manipuláltam úgy, hogy a decoratorban megadtam, escape => false.

Most így csinálom:

//elsőnek létrehoztam egy új form elementet, hogy később is könnyen
//fel lehessen használni
class My_Form_Element_Html extends Zend_Form_Element
{
     public $helper = 'formNote'; 
     
     //erre azért van szükség, mert ha a formon az isValid
     //hibát észlel, betölti a value értéket az átadott tömből
     //de ott ehez az form elemhez nem tartozik semmilyen érték
     //ezért a semmire állítja át. 
     //
     //Röviden enélkül nem jelenik meg
     //hibásan kitöltött form esetén 
     public function setValue( $value , $ok = false )
     {
           if( $ok )
             parent::setValue( $value );
     }
}

//a formban az init eljárásban
$this->addElement(
   $note = new My_Form_Element_Html('note')
);

// a true kell neki, csak akkor állítja be az értéket
$note->setValue('<h2>Hello World</h2>',true);

 

2 komment

Doctrine - sql lekérdezés hogyan

2010.03.20. 14:06 Mokacuka

Épp minap fordult elő velem, hogy nagyobb mennyiségű adatot kellett felvinnem az adatbázisba ( 3200 rekord )  instalállás során, és Doctrine::loadData() túl lassú volt hozzá, nem futott le 30mp alatt a script.

Ilyenkor érdemesebb a jó öreg sql parancsokhoz fordulni. Beállítottam a php max futási idejét extrém sokra ( 600mp , set_time_limit( 600 ) ), felvittem az adatokat, majd a tábla adatait exportáltam a phpmyadmin-ban. Kitöröltem minden felesleges dolgot, csak az insert lekérdezést hagytam meg.

Jött a kérdés, ezt hogy tudom doctrine-ben importálni?


$con = Doctrine_Manager::connection();
$q = $con->execute( file_get_contents( '/path/file.sql' ) );

//ha szükséged van az eredményre
$result = $q->fetchAll();

Szólj hozzá!

Zend Form kibővítése

2010.03.20. 00:16 Mokacuka

Engem mindig fusztrált, hogy egy csomó sort ( najó nem sok de 4-5 megvan ) kell írni ahoz, hogy ellenrizzem, volt e post -al küldve adat és hogy a form értékeit ellenörizzem.

Ha egy formot akarok létrehozni, akkor mindig egy saját osztályt példányosítok, ami részben így néz ki ( még pár plussz dolgot beletettem, pl ckeditor betöltése és hozzárendelése egy textarea-hoz, tudom csinálhattam volna új form elementet, de nekem így tetszik )

abstract class Kubi_Form extends Zend_Form
{

	public function isPosted( )
	{
		$fc = Zend_Controller_Front::getInstance();
		
		if($fc->getRequest()->isPost())
		{
			if( $this->isValid( $_POST ) )
		    {
		    	return true;
		    }		    
		}
		
		return false;
	}
}

// így máris egyszerűbb a használata
$form = new Kubi_Form_User_Core();
if( $form->isPosted() )
{
   if( $form->userSave() )
   {
      $form = 'Mentve.';
   }
}

$this->view->content = $form;

Ha formot kell csinálni, mindig külön osztályt hozok létre, mint fentebb látható, és az adatok mentése ( betöltése , frissítése ) adatbázisba mindig a form egyik eljárása végzi, így egy helyen tartom a kódot, újra felhasználható.

Felhasználó regisztrációnál pl.  két jelszó mezőt kell megadni, nem ismerek jelenleg olyan zend validatort amivel a két mező azonossága ellenörizhető, a userSave() eljárásban ezt megtudom tenni, hiba esetén a addError() és markAsError() eljárásokkal a megfelelő mezőhöz hozzáadható a hiba és ha a userSave() visszatérési értéke false, akkor a form újra megjelenik.

Ugyanezt a formot használom a felhasználó létrehozására, és a felhasználó adatainak módosítására is. Utóbbi esetben a szükségtelen részeket törlöm illetve ha kell újakat beillesztek a userLoad( Doctrine_Record $user ) részben.

A létrehzásnál és a módosításnál mért jó ugyanazt a formot használni? Nem kell újra megadni a zend validatorokat, filtereket, decoratorokat stb. és tuti egyeznek a beállításaik  (pl jelszónál minimum maximum karakter szám )

2 komment

Doctrine használatáról

2010.03.20. 00:01 Mokacuka

A doctrine használatáról kicsit bővebben akarok írni, ezért több részben teszem meg. Előző posztomban már leírtam, hogy hogyan lehet implementálni ( asszem ez a helyes szó erre ) a doctrine-t a ZF -be. Nem törekszek a részletes leírásra, nem is menne, nem vagyok tanár. olvass utánna, csak segítséget nyújtok. De ha kérdésed van, várom hozzászólásban.

Most essen szó, az adatbázis felépítéséről. Doctrine-ben az adatbázist YAML fájlban (.yml) lehet leírni, megadni a táblákat, relációkat, mezők tipusát. A hogyant itt, a doctrine oldalán eltudod olvasni.

Ha nincsenek relációk a táblák között, akkor nagyon egyszerü egy tábla leírása yml formában:

táblaneve:
  columns:
    mező_neve:
      type: tipus(méret)

Gondolom feltünt, hogy a táblanévhez képest a mező neve 2 db szóközzel van beljebb, és a mező névhez képest a tipus ismét két szöközzel van beljebb. Ezt a formát mindig megkell tartani, azzal hogy beljebb van, jelezzük pl, hogy a type attributum a mező_neve -hez tartozik, ha két szóközzel kijebb lenne, akkor a columns -hez tartozna.

Idegesítő, nehéz és lassú lenne az adatbázist így, közvetlenül a yaml fájl szerkesztésével elkészíteni, ezért ajánlom mindenki figyelmébe az ORM Designer -t. Fizetős, de 15 nap próba verzió teljes értékü ( és mondjuk virtualbox -ban az állapot mentése csodákra képes ) de ha megtetszik és rendszeresen dolgozol vele, vedd meg.

A táblákat és a táblák közötti kapcsolatot ( az Ms Accashez hasonlóan ) grafikus felületen lehet megtervezni. Praktikus, és gyors. Közvetlenül elmenti a megtervezett adatbázist a doctrine számára yml formába.

Táblák létrehozása yml fájlból
neten fent van sok helyen, de azért leírom:

//db törlélse
Doctrine::dropDatabases();
//db létrehozása
Doctrine::createDatabases();
		
//modellek legenerálása yml fájlból, modelsPath egy létezö, írható
//könyvtár legyen
Doctrine::generateModelsFromYaml( $ymlFile , $modelsPath );
//a modellekből létrehozza az adatbázis táblákat
Doctrine::createTablesFromModels( $modelsPath );

Ennyi az egész. Vigyázat! rögtön az elején törli az aktuális kapcsolatban beállított adatbázist, majd létrehozza ( így törölve az öszes előző adatot ).

Rekordok hozzáadása a táblához:

van egy táblánk, aminek a definiciója így néz ki:

User:
  columns:
    id:
      primary: true
      unique: true
      type: integer
      notnull: true
      autoincrement: true
    username: string(255)
    password: string(255)

A doctrine létrehoz egy User nevü osztályt, ez az osztály fogja egy rekordját reprezentálni a táblának. A User osztálynak 3 tulajdonsága van, id, username és password.

$user = new User();
$user->username = 'teszt';
$user->password = 'jelszo';
$user->save();

Ennyi az egész, ha egy új rekordot akarunk felvenni. a save() eljárás meghívása fontos, ekkor történik a rekord elmentése (elméletileg unset hatására automatikusan meghívódik )

Rekord kiolvasása táblából

Ezt több módon is megtehetjük.

$user = Doctrine_Manager::connection()->getTable( 'User' )->find( $id );

Ahol az id az elsődleges kulcs. Lehet keresni bármely mező alapján is, az sql parancs where részét megadva, kicsit módosítva, DQL -nek nevezi a doctrine.

$users = Doctrine_Manager::connection()
           ->getTable( 'User' )
           ->findByDql( 'username = ? AND password = ?' , array( $username , $password ) );

Ilyen formában megadva a keresést, a két változót, $username, $password , autómatikusan ellenörzi és meggátolja, hogy rajta keresztül sql kódot lehessen beszurni. A kérdőjelek helyére lesz beillesztve, sorrendben a két véltozó, ami tömbként lett átadva. Ha csak egy változónk van ( egy kérdőjel ) , simán, array nélkül is átlehet adni.

Gondolom feltünt, hogy a változó neve, amiben a rekordot tárolom, $user -ből $users lett. Ez azért történt, mert a findByDql nem egy rekordot ad vissza ( fenti példában jó esetben csak egyet, de akár több is lehetne ). Egy Doctrine_Collection osztályt ad vissza, ami több rekord gyüjtője. Fontosabb müveletek, amit ezzel az objektummal tenni tudunk, és amivel kitudjuk szedni belőle a rekordokat:

Ha tudjuk, hogy max 1 rekordot kapunk, vagy 1-et sem ( fenti példa ilyen ):

// count() fügvény megmondja, hogy hány rekord van a collection-ben
if( $users->count() == 1 )
{
    // getFirst() a legelső recordot adja vissza
    $user = $users->getFirst();

    /**
     * do stuffs $user -el
     */
}

//Ha x darab rekordunk van
if( $users->count() > 0 )
{
   foreach( $users as $user )
   {
      /**
       * do stuffs $user -el
       */
   }
}


Kövi részben az adat táblák közötti relációkról írok pár sort.

Szólj hozzá!

Címkék: doctrine

Néhány hasznos php cucc

2010.03.17. 14:24 Mokacuka

Képek kezeléséhez ezt használom: WideImage
kényelmes, viszonylag egyszerü. Átméretezni, vízjelezni, levágni, más formátumba menteni nagyon jól lehet vele ( meg még sok mást ).

Kifejezetten tetszik az általuk smart cordinates -nek nevezett megoldás. Nem csak pixel pontosan adhatom meg a méretet vagy a poziciót, hanem akár %-ban is.

Ha levélküldésről van szó, és nem elég a Zend Mail: PHPMailer
A hivatalos oldalukon, http://phpmailer.worxware.com/index.php még sok finomságot lehet találni, gpl liszensz alatt.


Ezeket még nem használtam, a php-blog.hu oldalon olvastam róluk, és hasznosnak találtam őket:

GeoIP - ha tudni akarjuk honnan jött a weblapunkra tévedő látogató: GeoIP PHP API

Vidók konvertálása FLV-be: FFMPEG-PHP

PDF fájlok előállítása: TCPDF

Excel fájlok készítése: PHPExcel

Szólj hozzá!

Címkék: etc

Doctrine integrálása ZF-be

2010.03.17. 13:07 Mokacuka

Ha nem tudod mi az a doctrine, nézd meg itt.

Röviden: az adatbázis kezelésben nyújt segítséget, gyorsítja a munkát, a táblákat, rekordokat objektumokon keresztül lehet elérni. Ha elkészült a teljes weboldal, segítségével úgy válthatunk mondjuk mysql adatbázisról bármely másik támogatott adatbázisra, hogy átkellene írnunk a már megírt program kódunkat.

Első lépésként töltsük le az 1.1.6 -os verziójú doctrine -t. Az 1.2 -vel nekem problémáim vannak, nem néztem utánna mi lehet a baj. Majd akkor váltok, ha a 2.0 -ból kijött a stable.

A library könyvtárban létre kell hozni egy doctrine nevü mappát. A letöltött tömörített fájlból másoljuk a lib könyvtár tartalmát ( doctrine.php és Doctrine mappa ) az imént létrehozott mappába.

Az application mappában hozzunk létre egy doctrine mappát, és azon belül egy models mappát. Itt fogjuk tárolni a doctrine által generált fájlokat.

Az application.ini -ben hozzunk létre egy struktúrát, amiben tároljuk az adatbázishoz tartozó infókat, illetve a models mappa helyét. pl.:

db.host = localhost
db.username = root
db.password = belepes
db.db = partyport
db.models = APPLICATION_PATH "/doctrine/models/"

Ezek után már csak a doctrine-t kell betölteni, beállítani az autoloadert.

A bootstrap.php fájlban hozzunk létre egy új eljárást, mondjuk _initDoctrine() néven, a tartalma a következő:

$config = $this->getOptions()
$host = $configs['db']['host'];
		  
$username = $configs['db']['username'];
  
$password = $configs['db']['password'];
  
$db = $configs['db']['db'];
		  
$models = $configs['db']['models'];

//Doctrine.php betöltése	
require_once(APPLICATION_PATH."/../library/doctrine/Doctrine.php");

//Doctrine autoloader regisztrálása
spl_autoload_register(array("Doctrine","autoload"));
		
$manager = Doctrine_Manager::getInstance();

		
$manager->setAttribute(
  doctrine::ATTR_MODEL_LOADING,
  doctrine::MODEL_LOADING_CONSERVATIVE
);

$manager->setAttribute(
  Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES,
  true
);

$manager->setAttribute(
  Doctrine::ATTR_VALIDATE,
  Doctrine::VALIDATE_ALL
);

$conn = Doctrine_Manager::connection(
  "mysql://{$username}:{$password}@{$host}/{$db}");
		
$conn->setCharset("utf8");
$conn->setAttribute(doctrine::ATTR_QUOTE_IDENTIFIER,true);
		        	       
Doctrine::loadModels($models);

Ezek után a doctrine használható, következő postban írok röviden a doctrine használatáról. Lehet több post lesz....

Szólj hozzá!

Címkék: zf doctrine

Az üresen hagyott img és link, href és src paraméterekről

2010.03.16. 20:06 Mokacuka

Minap jártam meg a tárgybelivel. Készítettem egy oldalt, ami az adatbázisban mindig növelt egy értéket, egyel. Hogy miért, most lényegtelen. A lényeg, hogy azt tapasztaltam, akár mit csinálok, a számláló értéke mindig kettesével növekszik.

Teszteltem, hogy hátha a doctrine viccel meg valamivel, de nem, ha layoutot váltottam, müködött rendesen.

Ekkor ugrott be, bassza meg, olvastam még anno a weblaboron, hogy az az img tegekben üresen hagyott src -k csinálnak egy újabb lekérdezést a szerver felé, mégpedig az aktuális oldalt próbálják újból megnyitni.

Kerestem a layout-ban, img tag nem volt, nem is lehetett, nem használtam benne, de volt egy <link rel="shortcut icon" type="image/ico" href="" /> , Itt volt a mackó elásva, amint töröltem máris megszünt a látszólag ok nélküli számláló kettesével növekszik problémám.

Tanulság: Figyelj oda és ne hagyj tagekben href és src paramétereket üresen!
És mindig olvasd a weblabor.hu -t :) nagyon jó oldal, hasznos infókkal, 2 naponta minimum ránézek egyszer.

Szólj hozzá!

Címkék: etc

Felhasználók bejelentkeztetése - biztonsági szempontból

2010.03.16. 19:57 Mokacuka

Sokat gondolkodtam már rajta, hogy mi lehet a legjobb megoldás biztonsági szempontból a felhasználók bejelentkeztetésénél. Olvastam angol oldalakon róla, és én a következőket vontam le:

  • A login formban mindig használd a Zend_Form_Elements_Hash -t ( és úgy egyébként minden formban, nyugodtan )
  • Személy szerint utálom a captcha és társait, van erre egy jobb, számomra jobb megoldás. Ha egy bizonyos mennyiségnél többszőr elrontotta a jelszavát a felhasználó akkor kitiltom x időre. Elég itt mondjuk 20 mp is, vagy 1 perc, a brute force tipusú támadásokat ez megállítja ( kurvára lelassítja, értelmét veszti ).

    Amikor egy létező felhasznál névvel sikertelen a bejelentkezés ( rossz jelszó miatt ) egy számlálót az adatbázisban növelek egyel, legyen ez faildnum, és egy másikba elmentem az aktuális időpontot, legyen ez lastfaild.

    Ha a lastfaild óta eltelt egy meghatározott idő intervallum, akkor a faildnum -ot 0 -ra állítom.

    Ha a faildnum elért egy bizonyos mennyiséget egy másik értéket, legyen ban, beállítom az aktuális idő + a ban idejére.

    Bejelentkezéskor figyelem, hogy a ban mezőben szereplő időpont kisebb egyenlő, vagy nagyobb e a mostani időpontnál.
     
  • Vigyázz, hogy a beviteli mezőkön keresztül ne lehessen sql kódot bejuttatni az adatbázisodba, mindig escapeld (mysql_real_escape_string) az sql-be átadott paramétereket, SŐT! A legjobb ha a Doctrine -t használod. Ha megtanultad a használatát, nagyon megtudja gyorsítani a munkádat, és ha helyesen használod, nem lesz gondod a mysql inject támadásokkal. Itt egy példa:
    Doctrine_Manager::connection()
        ->gettable('users')
        ->findByDql(' name = ? AND password = ? ', array( $name , $password ) );
    
    A fenti példában a felhasználó neve és jelszava autómatikussan escepelve lesz.
     
  • Másik fontos támadási mód, ha valamilyen módon ellopják  a session-öd, ehez elég csak megtudni a cookiekat, amik a gépedre vannak mentve. Ezellen védelmi módszer:

    A bejelentkezés során, a felhasználó böngészőjébe ments egy cookiet, ami tartalmazza md5-ölve a felhasználó ip -jét, és némi plussz karaktereket előtte és utánna is, lényeg hogy visszafejteni nehéz legyen. pl.:
    $ip=$_SERVER['REMOTE_ADDR']; 
    $cookie = md5( $salt1 . $ip . $salt2);
    setcookie( 'myauth' , $cookie , 0 , '/' , null , false , true );    
    Minden oldal letöltésnél, ugyanezzel a módszerrel generáld le a cookie-t, de a setcookie részt hagyd ki! és vesd össze a böngészőben tárolt cookie-val.

    Ha nem egyeznek meg, akkor ip cím változás volt, azaz a session-t lehet hogy ellopták és egy másik gépről próbálják használni. Itt van a hátránya is ennek a módszernek, ha a felhasználó olyan internet kapcsolatot használ ( pl. egy tűzfal, aminek 2 vagy több internet kapcsolata van és auto ballancing van beállítva rajta ) aminél nem állandóan ugyanaz az ip címe, így nem fogja tudni használni az oldalt.

    Emiatt a probléma miatt, ezt a megoldást csak különössen fontos helyeken használom, pl az admin felhasználóknál.
     
  • Ne használj olyan megoldásokat a jelszó tárolásnál, vagy az előző pontban a cookie létrehozásánál, mint pl.: md5( $salt1 . md5( $ip ) . md5( $salt2 ) );

    Ettől nem lesz biztonságosabb, nehezebben visszafejthető, sőt, md5 -ön belüli md5 esetén még kevesebb lesz a lehetőségek száma, olvasd el a php oldalán az md5-höz tartozó hozzászólásokat itt.
     
  • Minden oldalt körültekintően készíts, soha ne bízz a felhasználók által megadott adatokban! Ez minden programozási nyelvre igaz, anno ez volt az első amit megtanultam a tanárom révén :)
     

 

7 komment

Címkék: security zf users

Layout használata, minden modulhoz külön layout

2010.03.16. 12:27 Mokacuka

Mi az a layout? Itt kicsit utánna olvashatsz, ha felmerül benned ez a kérdés.

Első lépésben, állítsuk be a ZF-et, hogy használja a layout-ot, szerkesszük az application.ini fájlt és illeszük bele a következőt:

resources.layout.layoutPath = APPLICATION_PATH "/layouts"

Hozzuk létre az application mappában a layouts mappát, és egyből hozzuk létre a layout.phtml fájlt is. Egy egyszerü minta layout.phtml -re 

<html>
  <head>
    <?= $this->headTitle() ?>
    <?= $this->headLink()?>
    <?= $this->headStyle() ?>
    <?= $this->headScript() ?>
    <?= $this->headMeta() ?>
  </head>
  <body>
    <?=$this->layout()->content ?>
    <?= $this->InlineScript() ?>
  </body>
</html>

A külömböző, használható view helperekről itt olvashatsz többet. Ajánlom figyelmedbe a placeholder helpert is. Nagy az oldal, keress rá a headstyle, headscript stb. szóra.

 

Szuper, mostmár lehet nekiállni kitalálni a dizájnt, áttenni html-be és már formába is lehet önteni az oldalt.

Mi van, ha az egyes modulokhoz más-más dizájnt akarunk használni? A controllerben, a $this->view->layout()->setLayout([fájlnév kiterjesztés nélkül]); parancsal megváltoztathatjuk az épp aktuális layout scriptet, de minden egyes controllerben csináljuk ezt meg? Mi van ha változtatni akarunk, mindenhol írjuk át? NEM!

Készítsünk egy controller plugint.

 

class My_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
   public function dispatchLoopStartup( $request )
   {
      $layout = Zend_Layout::getMvcInstance();

      switch( $request->getModuleName() )
      {
        case 'default':
          $layout->setLayout('layout');
        break;
        case 'admin':
          $layout->setLayout('admin');
        break;
      }
   }

}


És ezzel minden probléma megoldva, egy helyen állítható be minden. Én úgy csinálom, hogy a modulokhoz tartozó layout-ot az application.ini -ben lehet megadni. Ha úgy érzed szükségesnek, akár controllerre vagy action-re is adhatsz meg más-más layout-ot ezzel a módszerrel, mindezt egy helyen, azaz a ha később módosítani kell, nem kell végigbogarásznód a fél programot.

3 komment

Modulok használata

2010.03.16. 12:14 Mokacuka

A zend frameworkben, egyik leghasznosabb dolognak a modulok használatát tartom. Miért jó ez? Mert a programomat különálló egységekbe tudom vele csoportosítani.

Modulonként kényelmesen adhatok meg külömböző dizájnt, jól elkülöníthető vele az admin rész a megjelenítésért felelős résztől, ha változtatni kell valamit gyorsan meglehet találni azt a pontot, ahol a változtatásokat végre kell hajtani, és még sorolhatnám.

Teendő:

1. az application mappában hozzunk létre egy modules mappát és azon belül egy default mappát.
2. az application mappából a view, controller, models mappákat mozgassuk a korábban létrehozott default mappába
3. szerkesszük az application.ini fájlt, adjuk hozzá a következőt

 

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] =

és kész is. Illetve egy dologra kell odafigyelni, ha a default modulon kívül létrehozunk egy új modult, abban a controller class-hoz prefixként hozzá kell illeszteni a module nevét, pl Admin_IndexController

 

2 lehetőség van innentől elérni a kívánt action controllert, /controller/action illetve /module/controller/action címen.

Kérdés: mi van akkor ha a default module tartalmaz egy show nevü controllert, és van egy show nevü module-unk? Még nem tudom, nem volt még ilyen esetem, kipróbálom :)

 

Szólj hozzá!

Címkék: zf module

kód részletek

2009.12.01. 21:58 Kubi

itt gyüjtöm a számomra fontosabbnak tartott kód részleteket, amiket jólenne megjegyeznem...

egy action controller urljét így kaphatjuk meg:

 

echo $this->view->url(
  array(
     'module'=>'default',
     'controller'=>'redirector',
     'action'=>'index',
     'param1'=>'asdf/asdf'
));

 

layout kikapcsolás, action controllerben

 

$this->_helper->layout->disableLayout()

 

útvonal megadása

 

Zend_Controller_Front::getInstance()->getRouter()->addRoute(
            'tortenetek_show', // route name
            new Zend_Controller_Router_Route(
                'tortenetek/:show',
                array(
                    'module'     => 'tortenetek',
                    'controller' => 'index',
                    'action'     => 'index',
                    'show'         => 'empty' //default value
                )
            )
        );

 

 page not found, error 404 exception

 

throw new Zend_Controller_Action_Exception('Az oldal nem található a szerveren',404);;

 Controllerben így kell megváltoztatni a view scriptet

//$this->_helper->viewRenderer( [script], [segment] , [not use path] );

// [module]/view/scripts/asd.phtml
$this->_helper->viewRenderer( '/asd.phtml', null , true );

// [module]/view/scripts/[controller]/asd.phtml
$this->_helper->viewRenderer( 'asd', null , true );

 

1 komment

Címkék: code zf

süti beállítások módosítása