{"id":173,"date":"2013-01-10T17:37:30","date_gmt":"2013-01-10T15:37:30","guid":{"rendered":"http:\/\/phpax.wordpress.com\/?p=173"},"modified":"2020-05-12T23:09:37","modified_gmt":"2020-05-12T20:09:37","slug":"zend-framework-ile-form-tasarlamak-zend_form","status":"publish","type":"post","link":"https:\/\/guvensahin.com\/tr\/zend-framework-ile-form-tasarlamak-zend_form\/","title":{"rendered":"Zend Framework ile Form Tasarlamak (Zend_Form)"},"content":{"rendered":"<p>Merhabalar,<\/p>\n<p>Uzun bir aradan sonra bir ba\u015fka yaz\u0131 ile kar\u015f\u0131n\u0131zday\u0131m. Bu yaz\u0131da g\u00fcndemim Zend. Sizlere Zend Framework&#8217;\u00fcn muhtemelen en \u00e7ok kullanaca\u011f\u0131n\u0131z bile\u015feni olan <a href=\"http:\/\/framework.zend.com\/manual\/1.12\/en\/zend.form.html\">Zend_Form<\/a> &#8216;dan bahsede\u011fim. Zend_Form, k\u0131saca Zend framework&#8217;\u00fcn sundu\u011fu bir form y\u00f6netim bile\u015feni\/s\u0131n\u0131f\u0131. Bu s\u0131n\u0131f ile html koduna dokunmadan dinamik olarak formlar olu\u015fturabilir, olu\u015fturdu\u011fumuz formlar\u0131 filtrelerden ge\u00e7irebilir validasyona tabi tutabiliriz.<\/p>\n<p>Ben bu yaz\u0131da bu s\u0131n\u0131f\u0131n 3 temel \u00f6zelli\u011finden bahsedece\u011fim. Bunlar dinamik form \u00fcretimi, filtre ve validasyon.<\/p>\n<p><!--more--><\/p>\n<h2>Dinamik Form \u00dcretmek<\/h2>\n<p>Normalde form tasarlarken input,select vb. form elemanlar\u0131n\u0131 tasar\u0131m i\u00e7inde html yazarak biz olu\u015ftururuz. Fakat Zend_Form, back-end tarafta yazd\u0131\u011f\u0131m\u0131z kodlarla b\u00fct\u00fcn formu y\u00f6netebilmemize olanak sa\u011fl\u0131yor. Yani html kodunu kendisi \u00fcretiyor. Bu asl\u0131nda tam olarak asp.net&#8217;in web forms elemanlar\u0131 gibi.<\/p>\n<p>Peki bunu neden kullanmal\u0131y\u0131z derseniz; Zend, kendi olu\u015fturdu\u011fu bu form \u00fczerinde tam kontrole sahip. Bu sayede kolay bir \u015fekilde filtreleme ve validasyon i\u015flemleri yapabiliriz. Ve s\u00f6ylemeliyimki Zend&#8217;in validasyon s\u0131n\u0131flar\u0131 derya deniz. Hemen her ihtiyac\u0131 kar\u015f\u0131layacak fonksiyon mevcut. Temel olarak kulland\u0131\u011f\u0131m\u0131z bu input bo\u015f mu, i\u00e7indeki de\u011fer \u015fu karakterden uzunmu vs. den tutun iban, kredi kart\u0131, barkod kontrol\u00fcne kadar detayl\u0131 \u015fekilde mevcut.<\/p>\n<p>Ayr\u0131ca belirtmem gerekirki Zend_Validate ve Zend_Filter asl\u0131nda ayr\u0131 s\u0131n\u0131flar. Zend_Form olmadan da tek ba\u015flar\u0131na bu s\u0131n\u0131flar\u0131 kullanabilirsiniz. Fakat Zend_Form ile tam entegrasyona sahipler.<\/p>\n<p>Formu dinamik olarak \u00fcretti\u011fimizde zend, form elemanlar\u0131n\u0131 kendisi hizal\u0131yor. \u00d6rnek bir \u00e7\u0131kt\u0131 a\u015fa\u011f\u0131da yer al\u0131yor. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi form elemanlar\u0131n\u0131 dd taglar\u0131 i\u00e7erisine al\u0131yor. Bunu yine kod taraf\u0131nda de\u011fi\u015ftirmek m\u00fcmk\u00fcn fakat daha komplike tasar\u0131mlarda i\u015finiz zorla\u015facak.<\/p>\n<pre lang=\"html\">\r\n<dt><label for=\"username\">Username<\/dt>\r\n<dd><input type=\"text\" name=\"username\" value=\"123-abc\" \/><\/dd>\r\n<\/pre>\n<h3>Html ve Zend_Form<\/h3>\n<p>Zend_Form&#8217;un kendi \u00fcretti\u011fi formlar\u0131 kullanmak zorunda de\u011filsiniz. Dinamik olarak form \u00fcretmeye ihtiyac\u0131n\u0131z yoksa \u015fu sayfada form de\u011fi\u015fsin \u015fu elemanlar gelsin \u015funlar gelmesin vs talepleriniz yoksa normal html formunuzu kendiniz olu\u015fturabilir Zend_Form&#8217;un di\u011fer \u00f6zelliklerinden fayfalanabilirsiniz.<\/p>\n<h2>Koda Ge\u00e7elim<\/h2>\n<pre lang=\"php\">\r\npublic function indexAction()\r\n{\r\n    \/\/ bile\u015fenimizi \u00e7a\u011f\u0131r\u0131yoruz\r\n    $form = new Zend_Form;\r\n\r\n    \/\/ <form> tag\u0131m\u0131z\u0131n action ve method niteliklerinin alaca\u011f\u0131 de\u011feri belirliyoruz.\r\n    $form->setAction('\/resource\/process')\r\n         ->setMethod('post');\r\n\r\n    \/\/ form elemanlar\u0131m\u0131z\u0131 ekliyoruz.\r\n    $username = new Zend_Form_Element_Text('username');\r\n    $username->setRequired(true)\r\n             ->setLabel('Kullan\u0131c\u0131 Ad\u0131:')\r\n             ->addFilters(array('StringTrim'))\r\n             ->addValidator('stringLength', false, array(3, 30));\r\n\r\n    $password = new Zend_Form_Element_Text('password');\r\n    $password->setRequired(true)\r\n             ->setLabel('\u015eifre:')\r\n             ->addFilters(array('StringTrim', 'StringtoLower'))\r\n             ->addValidator('alnum')\r\n             ->addValidator('stringLength', false, array(6, 16));\r\n\r\n    \/*\r\n        Alternatif olarak a\u015fa\u011f\u0131daki \u015fekildede ekliyebebiliriz.\r\n        $form->addElement('text', 'username');\r\n    *\/\r\n\r\n    \/\/ $username ve $password isimli de\u011fi\u015fkenlere olu\u015fturdu\u011fumuz form objelerimi\r\n    \/\/ $form objesine tan\u0131t\u0131yoruz.\r\n    $form->addElements(array($username, $password));\r\n\r\n    \/\/ ard\u0131ndan formumuzu yazd\u0131rmak i\u00e7in view'a g\u00f6nderiyoruz.\r\n    $this->view->form = $form;\r\n}\r\n<\/pre>\n<p>Bundan sonra tek yapmam\u0131z gereken view&#8217;a gidip i\u00e7ine \u015fu sat\u0131r\u0131 yazmak.<\/p>\n<pre lang=\"php\"><?php echo $this->form; ?><\/pre>\n<p>Tabi daha \u00f6ncede dedi\u011fim gibi formu ekrana basmak zorunda de\u011filsiniz. Formu birebir kod taraf\u0131nda olu\u015fturup ekrana \u00e7\u0131kt\u0131lamak yerine kendi html formunuzu kullabilirsiniz. Tek dikkat etmeniz gereken name de\u011ferleri. Zend&#8217;e belirtti\u011finiz name ile html formunkilerin uyu\u015fmas\u0131na dikkat edin.<\/p>\n<p>Yine \u00f6rnekte g\u00f6rece\u011finiz \u00fczere username ve password&#8217;e \u00e7e\u015fitli filtreler ve validasyonlar uygulad\u0131m. Kullanabilece\u011finiz filtreler i\u00e7in <a href=\"http:\/\/framework.zend.com\/manual\/1.12\/en\/zend.form.elements.html#zend.form.elements.filters\">buraya <\/a>validasyonlar i\u00e7inde <a href=\"http:\/\/framework.zend.com\/manual\/1.12\/en\/zend.form.elements.html#zend.form.elements.validators\">\u015furaya <\/a>bakabilirsiniz.<\/p>\n<p>Son olarak formumuzun ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131, ge\u00e7erli ise filtrelenmi\u015f datay\u0131 alal\u0131m. Ge\u00e7erli de\u011fil ise hatalar\u0131 ekrana yazd\u0131ral\u0131m. Zend varsay\u0131lan olan kendi ingilizce hatalar\u0131n\u0131 \u00e7\u0131kt\u0131lar. Tabi bu mesajlar\u0131 kendiniz m\u00fcdahale edebilirsiniz.<\/p>\n<pre lang=\"php\">\r\nif ($form->isValid($_POST))\r\n{\r\n    $values = $form->getValues($_POST);\r\n\r\n    echo 'form validasyondan ge\u00e7ti. filtrelenmi\u015f veri:';\r\n    echo var_dump($values);\r\n}\r\nelse\r\n{\r\n    echo 'form validasyondan ge\u00e7emedi. hata mesajlar\u0131:';\r\n    echo var_dump($form->getMessages());\r\n}\r\n<\/pre>\n<p>\u015eimdilik Ho\u015f\u00e7akal\u0131n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhabalar, Uzun bir aradan sonra bir ba\u015fka yaz\u0131 ile kar\u015f\u0131n\u0131zday\u0131m. Bu yaz\u0131da g\u00fcndemim Zend. Sizlere Zend Framework&#8217;\u00fcn muhtemelen en \u00e7ok kullanaca\u011f\u0131n\u0131z bile\u015feni olan Zend_Form &#8216;dan bahsede\u011fim. Zend_Form, k\u0131saca Zend framework&#8217;\u00fcn sundu\u011fu bir form y\u00f6netim bile\u015feni\/s\u0131n\u0131f\u0131. Bu s\u0131n\u0131f ile html koduna dokunmadan dinamik olarak formlar olu\u015fturabilir, olu\u015fturdu\u011fumuz formlar\u0131 filtrelerden ge\u00e7irebilir validasyona tabi tutabiliriz. Ben bu yaz\u0131da&hellip;&nbsp;<a href=\"https:\/\/guvensahin.com\/tr\/zend-framework-ile-form-tasarlamak-zend_form\/\" rel=\"bookmark\">Daha fazlas\u0131n\u0131 oku &raquo;<span class=\"screen-reader-text\">Zend Framework ile Form Tasarlamak (Zend_Form)<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[239],"tags":[214,229],"class_list":["post-173","post","type-post","status-publish","format-standard","hentry","category-programlama","tag-php-2","tag-zend-framework"],"_links":{"self":[{"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/posts\/173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/comments?post=173"}],"version-history":[{"count":2,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/posts\/173\/revisions"}],"predecessor-version":[{"id":414,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/posts\/173\/revisions\/414"}],"wp:attachment":[{"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/media?parent=173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/categories?post=173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/tags?post=173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}