<label id="nfglp"></label>

      \r\n  

      This is an example.<\/p>\r\n<\/body>\r\n<\/html><\/pre>

         <\/p>

      <\/p>

      現(xiàn)在,如果你訪問自己網(wǎng)站的根資源,你會(huì)看到example.php的內(nèi)容。這仍沒什么用,但你要清楚你要在以一種結(jié)構(gòu)和組織非常清楚的方式在開發(fā)網(wǎng)絡(luò)應(yīng)用。<\/p>

      為了讓Zend_View的應(yīng)用更清楚一點(diǎn),,修改你的模板(example.php)包含以下內(nèi)容:<\/p>

      \r\n\r\n  <?php echo $this->escape($this->title); ?><\/title>\r\n<\/head>\r\n<body>
      <h1><a href="http://www.miracleart.cn/">国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂</a></h1>\r\n  <?php echo $this->escape($this->body); ?>\r\n<\/body>\r\n<\/html><\/pre><p>   <\/p><p><\/p><p>現(xiàn)在已經(jīng)添加了兩個(gè)功能。$this->escape()類方法用于所有的輸出。即使你自己創(chuàng)建輸出,就像這個(gè)例子一樣。避開所有輸出也是一個(gè)很好的習(xí)慣,它可以在默認(rèn)情況下幫助你防止跨站腳本攻擊(XSS)。<\/p><p>$this->title和$this->body屬性用來展示動(dòng)態(tài)數(shù)據(jù)。這些也可以在controller中定義,所以我們修改IndexController.php以指定它們:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nZend::loadClass('Zend_Controller_Action');\r\nZend::loadClass('Zend_View');\r\nclass IndexController extends Zend_Controller_Action\r\n{\r\n  public function indexAction()\r\n  {\r\n    $view = new Zend_View();\r\n    $view->setScriptPath('\/path\/to\/views');\r\n    $view->title = 'Dynamic Title';\r\n    $view->body = 'This is a dynamic body.';\r\n    echo $view->render('example.php');\r\n  }\r\n  public function noRouteAction()\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>現(xiàn)在你再次訪問根目錄,應(yīng)該就可以看到模板所使用的這些值了。因?yàn)槟阍谀0逯惺褂玫?this就是在Zend_View范圍內(nèi)所執(zhí)行的實(shí)例。<\/p><p>要記住example.php只是一個(gè)普通的PHP腳本,所以你完全可以做你想做的。只是應(yīng)努力只在要求顯示數(shù)據(jù)時(shí)才使用模板。你的controller (controller分發(fā)的模塊)應(yīng)處理你全部的業(yè)務(wù)邏輯。<\/p><p>在繼續(xù)之前,我想做最后一個(gè)關(guān)于Zend_View的提示。在controller的每個(gè)類方法內(nèi)初始化$view對象需要額外輸入一些內(nèi)容,而我們的主要目標(biāo)是讓快速開發(fā)網(wǎng)絡(luò)應(yīng)用更簡單。如果所有模板都放在一個(gè)目錄下,是否要在每個(gè)例子中都調(diào)用setScriptPath()也存在爭議。<\/p><p>幸運(yùn)的是,Zend類包含了一個(gè)寄存器來幫助減少工作量。你可以用register()方法把你的$view對象存儲(chǔ)在寄存器:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nZend::register('view', $view);\r\n?><\/pre><p>   <\/p><p><\/p><p>用registry()方法進(jìn)行檢索:<\/p><pre class='brush:php;toolbar:false;'><?php\r\n$view = Zend::registry('view');\r\n?><\/pre><p>   <\/p><p><\/p><p>基于這點(diǎn),本教程使用寄存器。 <\/p><p>Zend_InputFilter<\/p><p>本教程討論的最后一個(gè)組件是Zend_InputFilter。這個(gè)類提供了一種簡單而有效的輸入過濾方法。你可以通過提供一組待過濾數(shù)據(jù)來進(jìn)行初始化。<\/p><pre class='brush:php;toolbar:false;'><?php\r\n$filterPost = new Zend_InputFilter($_POST);\r\n?><\/pre><p>   <\/p><p><\/p><p>這會(huì)將($_POST)設(shè)置為NULL,所以就不能直接進(jìn)入了。Zend_InputFilter提供了一個(gè)簡單、集中的根據(jù)特定規(guī)則過濾數(shù)據(jù)的類方法集。例如,你可以用getAlpha()來獲取$_POST['name']中的字母:<\/p><pre class='brush:php;toolbar:false;'><?php\r\n\/* $_POST['name'] = 'John123Doe'; *\/\r\n$filterPost = new Zend_InputFilter($_POST);\r\n\/* $_POST = NULL; *\/\r\n$alphaName = $filterPost->getAlpha('name');\r\n\/* $alphaName = 'JohnDoe'; *\/\r\n?><\/pre><p>   <\/p><p><\/p><p>每一個(gè)類方法的參數(shù)都是對應(yīng)要過濾的元素的關(guān)鍵詞。對象(例子中的$filterPost)可以保護(hù)數(shù)據(jù)不被篡改,并能更好地控制對數(shù)據(jù)的操作及一致性。因此,當(dāng)你操縱輸入數(shù)據(jù),應(yīng)始終使用Zend_InputFilter。<\/p><p>提示:Zend_Filter提供與Zend_InputFilter方法一樣的靜態(tài)方法。<\/p><p>構(gòu)建新聞管理系統(tǒng)<\/p><p>雖然預(yù)覽版提供了許多組件(甚至許多已經(jīng)被開發(fā)),我們已經(jīng)討論了構(gòu)建一個(gè)簡單程序所需要的全部組件。在這里,你會(huì)對ZF的基本結(jié)構(gòu)和設(shè)計(jì)有更清楚的理解。<\/p><p>每個(gè)人開發(fā)的程序都會(huì)有所不同,而Zend Framework試圖包容這些差異。同樣,這個(gè)教程是根據(jù)我的喜好寫的,請根據(jù)自己的偏好自行調(diào)整。<\/p><p>當(dāng)我開發(fā)程序時(shí),我會(huì)先做界面。這并不意味著我把時(shí)間都花在標(biāo)簽、樣式表和圖片上,而是我從一個(gè)用戶的角度去考慮問題。因此我把程序看成是頁面的集合,每一頁都是一個(gè)獨(dú)立的網(wǎng)址。這個(gè)新聞系統(tǒng)就是由以下網(wǎng)址組成的:<\/p><p>\/<br\/>\/add\/news<br\/>\/add\/comment<br\/>\/admin<br\/>\/admin\/approve<br\/>\/view\/{id}<\/p><p>你可以直接把這些網(wǎng)址和controller聯(lián)系起來。IndexController列出新聞,AddController添加新聞和評(píng)論,AdminController處理一些如批準(zhǔn)新聞之類的管理,ViewController特定新聞和對應(yīng)評(píng)論的顯示。<\/p><p>如果你的FooController.php還在,把它刪除。修改IndexController.php,為業(yè)務(wù)邏輯以添加相應(yīng)的action和一些注釋:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nZend::loadClass('Zend_Controller_Action');\r\nclass IndexController extends Zend_Controller_Action\r\n{\r\n  public function indexAction()\r\n  {\r\n    \/* List the news. *\/\r\n  }\r\n  public function noRouteAction()\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>接下來,創(chuàng)建AddController.php文件:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nZend::loadClass('Zend_Controller_Action');\r\nclass AddController extends Zend_Controller_Action\r\n{\r\n  function indexAction()\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n  function commentAction()\r\n  {\r\n    \/* Add a comment. *\/\r\n  }\r\n  function newsAction()\r\n  {\r\n    \/* Add news. *\/\r\n  }\r\n  function __call($action, $arguments)\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>記住AddController的indexAction()方法不能調(diào)用。當(dāng)訪問\/add時(shí)會(huì)執(zhí)行這個(gè)類方法。因?yàn)橛脩艨梢允止ぴL問這個(gè)網(wǎng)址,這是有可能的,所以你要把用戶重定向到主頁、顯示錯(cuò)誤或你認(rèn)為合適的行為。<\/p><p>接下來,創(chuàng)建AdminController.php文件:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nZend::loadClass('Zend_Controller_Action');\r\nclass AdminController extends Zend_Controller_Action\r\n{\r\n  function indexAction()\r\n  {\r\n    \/* Display admin interface. *\/\r\n  }\r\n  function approveAction()\r\n  {\r\n    \/* Approve news. *\/\r\n  }\r\n  function __call($action, $arguments)\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>最后,創(chuàng)建ViewController.php文件:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nZend::loadClass('Zend_Controller_Action');\r\nclass ViewController extends Zend_Controller_Action\r\n{\r\n  function indexAction()\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n  function __call($id, $arguments)\r\n  {\r\n    \/* Display news and comments for $id. *\/\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>和AddController一樣,index()方法不能調(diào)用,所以你可以使用你認(rèn)為合適的action。ViewController和其它的有點(diǎn)不同,因?yàn)槟悴恢朗裁床攀怯行У腶ction。為了支持像\/view\/23這樣的網(wǎng)址,你要使用__call()來支持動(dòng)態(tài)action。<\/p><p>數(shù)據(jù)庫操作<\/p><p>因?yàn)閆end Framework的數(shù)據(jù)庫組件還不穩(wěn)定,而我希望這個(gè)演示可以做得簡單一點(diǎn)。我使用了一個(gè)簡單的類,用SQLite進(jìn)行新聞條目和評(píng)論的存儲(chǔ)和查詢。<\/p><pre class='brush:php;toolbar:false;'><?php\r\nclass Database\r\n{\r\n  private $_db;\r\n  public function __construct($filename)\r\n  {\r\n    $this->_db = new SQLiteDatabase($filename);\r\n  }\r\n  public function addComment($name, $comment, $newsId)\r\n  {\r\n    $name = sqlite_escape_string($name);\r\n    $comment = sqlite_escape_string($comment);\r\n    $newsId = sqlite_escape_string($newsId);\r\n    $sql = \"INSERT\r\n        INTO  comments (name, comment, newsId)\r\n        VALUES ('$name', '$comment', '$newsId')\";\r\n    return $this->_db->query($sql);\r\n  }\r\n  public function addNews($title, $content)\r\n  {\r\n    $title = sqlite_escape_string($title);\r\n    $content = sqlite_escape_string($content);\r\n    $sql = \"INSERT\r\n        INTO  news (title, content)\r\n        VALUES ('$title', '$content')\";\r\n    return $this->_db->query($sql);\r\n  }\r\n  public function approveNews($ids)\r\n  {\r\n    foreach ($ids as $id) {\r\n      $id = sqlite_escape_string($id);\r\n      $sql = \"UPDATE news\r\n          SET  approval = 'T'\r\n          WHERE id = '$id'\";\r\n      if (!$this->_db->query($sql)) {\r\n        return FALSE;\r\n      }\r\n    }\r\n    return TRUE;\r\n  }\r\n  public function getComments($newsId)\r\n  {\r\n    $newsId = sqlite_escape_string($newsId);\r\n    $sql = \"SELECT name, comment\r\n        FROM  comments\r\n        WHERE newsId = '$newsId'\";\r\n    if ($result = $this->_db->query($sql)) {\r\n      return $result->fetchAll();\r\n    }\r\n    return FALSE;\r\n  }\r\n  public function getNews($id = 'ALL')\r\n  {\r\n    $id = sqlite_escape_string($id);\r\n    switch ($id) {\r\n      case 'ALL':\r\n        $sql = \"SELECT id,\r\n                title\r\n            FROM  news\r\n            WHERE approval = 'T'\";\r\n        break;\r\n      case 'NEW':\r\n        $sql = \"SELECT *\r\n            FROM  news\r\n            WHERE approval != 'T'\";\r\n        break;\r\n      default:\r\n        $sql = \"SELECT *\r\n            FROM  news\r\n            WHERE id = '$id'\";\r\n        break;\r\n    }\r\n    if ($result = $this->_db->query($sql)) {\r\n      if ($result->numRows() != 1) {\r\n        return $result->fetchAll();\r\n      } else {\r\n        return $result->fetch();\r\n      }\r\n    }\r\n    return FALSE;\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>(你可以用自己的解決方案隨意替換這個(gè)類。這里只是為你提供一個(gè)完整示例的介紹,并非建議要這么實(shí)現(xiàn)。)<\/p><p>這個(gè)類的構(gòu)造器需要SQLite數(shù)據(jù)庫的完整路徑和文件名,你必須自己進(jìn)行創(chuàng)建。<\/p><pre class='brush:php;toolbar:false;'><?php\r\n$db = new SQLiteDatabase('\/path\/to\/db.sqlite');\r\n$db->query(\"CREATE TABLE news (\r\n    id    INTEGER PRIMARY KEY,\r\n    title  VARCHAR(255),\r\n    content TEXT,\r\n    approval CHAR(1) DEFAULT 'F'\r\n  )\");\r\n$db->query(\"CREATE TABLE comments (\r\n    id    INTEGER PRIMARY KEY,\r\n    name   VARCHAR(255),\r\n    comment TEXT,\r\n    newsId  INTEGER\r\n  )\");\r\n?><\/pre><p>   <\/p><p><\/p><p>你只需要做一次,以后直接給出Database類構(gòu)造器的完整路徑和文件名即可:<\/p><pre class='brush:php;toolbar:false;'><?php\r\n$db = new Database('\/path\/to\/db.sqlite');\r\n?><\/pre><p>   <\/p><p><\/p><p>整合<\/p><p>為了進(jìn)行整合,在lib目錄下創(chuàng)建Database.php,loadClass()就可以找到它。你的index.php文件現(xiàn)在就會(huì)初始化$view和$db并存儲(chǔ)到寄存器。你也可以創(chuàng)建__autoload()函數(shù)自動(dòng)加載你所需要的類:<\/p><pre class='brush:php;toolbar:false;'><?php\r\ninclude 'Zend.php';\r\nfunction __autoload($class)\r\n{\r\n  Zend::loadClass($class);\r\n}\r\n$db = new Database('\/path\/to\/db.sqlite');\r\nZend::register('db', $db);\r\n$view = new Zend_View;\r\n$view->setScriptPath('\/path\/to\/views');\r\nZend::register('view', $view);\r\n$controller = Zend_Controller_Front::getInstance()\r\n       ->setControllerDirectory('\/path\/to\/controllers')\r\n       ->dispatch();\r\n?><\/pre><p>   <\/p><p><\/p><p>接下來,在views目錄創(chuàng)建一些簡單的模板。index.php可以用來顯示index視圖:<\/p><pre class='brush:php;toolbar:false;'><html>\r\n<head>\r\n <title>News<\/title>\r\n<\/head>\r\n<body>\r\n <h1>News<\/h1>\r\n <?php foreach ($this->news as $entry) { ?>\r\n <p>\r\n  <a href=\"\/view\/<?php echo $this->escape($entry['id']); ?>\">\r\n  <?php echo $this->escape($entry['title']); ?>\r\n  <\/a>\r\n <\/p>\r\n <?php } ?>\r\n <h1>Add News<\/h1>\r\n <form action=\"\/add\/news\" method=\"POST\">\r\n <p>Title:<br \/><input type=\"text\" name=\"title\" \/><\/p>\r\n <p>Content:<br \/><textarea name=\"content\"><\/textarea><\/p>\r\n <p><input type=\"submit\" value=\"Add News\" \/><\/p>\r\n <\/form>\r\n<\/body>\r\n<\/html><\/pre><p>   <\/p><p><\/p><p>view.php模板可以用來顯示選定的新聞條目:<\/p><pre class='brush:php;toolbar:false;'><html>\r\n<head>\r\n <title>\r\n  <?php echo $this->escape($this->news['title']); ?>\r\n <\/title>\r\n<\/head>\r\n<body>\r\n <h1>\r\n  <?php echo $this->escape($this->news['title']); ?>\r\n <\/h1>\r\n <p>\r\n  <?php echo $this->escape($this->news['content']); ?>\r\n <\/p>\r\n <h1>Comments<\/h1>\r\n <?php foreach ($this->comments as $comment) { ?>\r\n <p>\r\n  <?php echo $this->escape($comment['name']); ?> writes:\r\n <\/p>\r\n <blockquote>\r\n  <?php echo $this->escape($comment['comment']); ?>\r\n <\/blockquote>\r\n <?php } ?>\r\n <h1>Add a Comment<\/h1>\r\n <form action=\"\/add\/comment\" method=\"POST\">\r\n <input type=\"hidden\" name=\"newsId\"\r\n  value=\"<?php echo $this->escape($this->id); ?>\" \/>\r\n <p>Name:<br \/><input type=\"text\" name=\"name\" \/><\/p>\r\n <p>Comment:<br \/><textarea name=\"comment\"><\/textarea><\/p>\r\n <p><input type=\"submit\" value=\"Add Comment\" \/><\/p>\r\n <\/form>\r\n<\/body>\r\n<\/html><\/pre><p>   <\/p><p><\/p><p>最后,admin.php模板可以用來批準(zhǔn)新聞條目:<\/p><pre class='brush:php;toolbar:false;'><html>\r\n<head>\r\n <title>News Admin<\/title>\r\n<\/head>\r\n<body>\r\n <form action=\"\/admin\/approve\" method=\"POST\">\r\n <?php foreach ($this->news as $entry) { ?>\r\n <p>\r\n  <input type=\"checkbox\" name=\"ids[]\"\r\n  value=\"<?php echo $this->escape($entry['id']); ?>\" \/>\r\n  <?php echo $this->escape($entry['title']); ?>\r\n  <?php echo $this->escape($entry['content']); ?>\r\n <\/p>\r\n <?php } ?>\r\n <p>\r\n  Password:<br \/><input type=\"password\" name=\"password\" \/>\r\n <\/p>\r\n <p><input type=\"submit\" value=\"Approve\" \/><\/p>\r\n <\/form>\r\n<\/body>\r\n<\/html><\/pre><p>   <\/p><p><\/p><p>提示:為了保持簡單,這個(gè)表單用密碼作為驗(yàn)證機(jī)制。<\/p><p>使用到模板的地方,你只需要把注釋替換成幾行代碼。如IndexController.php就變成下面這樣:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nclass IndexController extends Zend_Controller_Action\r\n{\r\n  public function indexAction()\r\n  {\r\n    \/* List the news. *\/\r\n    $db = Zend::registry('db');\r\n    $view = Zend::registry('view');\r\n    $view->news = $db->getNews();\r\n    echo $view->render('index.php');\r\n  }\r\n  public function noRouteAction()\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>因?yàn)闂l理比較清楚,這個(gè)程序首頁的整個(gè)業(yè)務(wù)邏輯只有四行代碼。AddController.php更復(fù)雜一點(diǎn),它需要更多的代碼:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nclass AddController extends Zend_Controller_Action\r\n{\r\n  function indexAction()\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n  function commentAction()\r\n  {\r\n    \/* Add a comment. *\/\r\n    $filterPost = new Zend_InputFilter($_POST);\r\n    $db = Zend::registry('db');\r\n    $name = $filterPost->getAlpha('name');\r\n    $comment = $filterPost->noTags('comment');\r\n    $newsId = $filterPost->getDigits('newsId');\r\n    $db->addComment($name, $comment, $newsId);\r\n    $this->_redirect(\"\/view\/$newsId\");\r\n  }\r\n  function newsAction()\r\n  {\r\n    \/* Add news. *\/\r\n    $filterPost = new Zend_InputFilter($_POST);\r\n    $db = Zend::registry('db');\r\n    $title = $filterPost->noTags('title');\r\n    $content = $filterPost->noTags('content');\r\n    $db->addNews($title, $content);\r\n    $this->_redirect('\/');\r\n  }\r\n  function __call($action, $arguments)\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>因?yàn)橛脩粼谔峤槐韱魏蟊恢囟ㄏ?,這個(gè)controller不需要視圖。<\/p><p>在AdminController.php,你要處理顯示管理界面和批準(zhǔn)新聞兩個(gè)action:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nclass AdminController extends Zend_Controller_Action\r\n{\r\n  function indexAction()\r\n  {\r\n    \/* Display admin interface. *\/\r\n    $db = Zend::registry('db');\r\n    $view = Zend::registry('view');\r\n    $view->news = $db->getNews('NEW');\r\n    echo $view->render('admin.php');\r\n  }\r\n  function approveAction()\r\n  {\r\n    \/* Approve news. *\/\r\n    $filterPost = new Zend_InputFilter($_POST);\r\n    $db = Zend::registry('db');\r\n    if ($filterPost->getRaw('password') == 'mypass') {\r\n      $db->approveNews($filterPost->getRaw('ids'));\r\n      $this->_redirect('\/');\r\n    } else {\r\n      echo 'The password is incorrect.';\r\n    }\r\n  }\r\n  function __call($action, $arguments)\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n}\r\n?><\/pre><p>   <\/p><p><\/p><p>最后是ViewController.php:<\/p><pre class='brush:php;toolbar:false;'><?php\r\nclass ViewController extends Zend_Controller_Action\r\n{\r\n  function indexAction()\r\n  {\r\n    $this->_redirect('\/');\r\n  }\r\n  function __call($id, $arguments)\r\n  {\r\n    \/* Display news and comments for $id. *\/\r\n    $id = Zend_Filter::getDigits($id);\r\n    $db = Zend::registry('db');\r\n    $view = Zend::registry('view');\r\n    $view->news = $db->getNews($id);\r\n    $view->comments = $db->getComments($id);\r\n    $view->id = $id;\r\n    echo $view->render('view.php');\r\n  }\r\n}\r\n?><\/pre><p>? ?<\/p>\n<p><\/p>\n<p>雖然很簡單,但我們還是提供了一個(gè)功能較全的新聞和評(píng)論程序。最好的地方是由于有較好的設(shè)計(jì),增加功能變得很簡單。而且隨著Zend Framework越來越成熟,只會(huì)變得更好。<\/p>\n<p>更多信息<\/p>\n<p>這個(gè)教程只是討論了ZF表面的一些功能,但現(xiàn)在也有一些其它的資源可供參考。在http:\/\/framework.zend.com\/manual\/有手冊可以查詢,Rob Allen在http:\/\/akrabat.com\/zend-framework\/介紹了一些他使用Zend Framework的經(jīng)驗(yàn),而Richard Thomas也在http:\/\/www.cyberlot.net\/zendframenotes提供了一些有用的筆記。如果你有自己的想法,可以訪問Zend Framework的新論壇:http:\/\/www.phparch.com\/discuss\/index.php\/f\/289\/\/。<\/p>\n<p>結(jié)束語<\/p>\n<p>要對預(yù)覽版進(jìn)行評(píng)價(jià)是很容易的事,我在寫這個(gè)教程時(shí)也遇到很多困難。總的來說,我想Zend Framework顯示了承諾,加入的每個(gè)人都是想繼續(xù)完善它。<\/p>\n<p>Ich hoffe, dass dieser Artikel für jedermann bei der PHP-Programmierung basierend auf dem Zend Framework-Framework hilfreich sein wird. <\/p>\n<p>Weitere Artikel zu Einführungs-Klassiker-Tutorials zur Zend Framework-Entwicklung finden Sie auf der chinesischen PHP-Website! <\/p>"}	</script>
      	
      <meta http-equiv="Cache-Control" content="no-transform" />
      <meta http-equiv="Cache-Control" content="no-siteapp" />
      <script>var V_PATH="/";window.onerror=function(){ return true; };</script>
      </head>
      
      <body data-commit-time="2023-12-28T14:50:12+08:00" class="editor_body body2_2">
      	<link rel="stylesheet" type="text/css" href="/static/csshw/stylehw.css">
      <header>
          <div   id="377j5v51b"   class="head">
              <div   id="377j5v51b"   class="haed_left">
                  <div   id="377j5v51b"   class="haed_logo">
                      <a href="http://www.miracleart.cn/de/" title="" class="haed_logo_a">
                          <img src="/static/imghw/logo.png" alt="" class="haed_logoimg">
                      </a>
                  </div>
                  <div   id="377j5v51b"   class="head_nav">
                      <div   id="377j5v51b"   class="head_navs">
                          <a href="javascript:;" title="Gemeinschaft" class="head_nava head_nava-template1">Gemeinschaft</a>
                          <div   class="377j5v51b"   id="dropdown-template1" style="display: none;">
                              <div   id="377j5v51b"   class="languagechoose">
                                  <a href="http://www.miracleart.cn/de/article.html" title="Artikel" class="languagechoosea on">Artikel</a>
                                  <a href="http://www.miracleart.cn/de/faq/zt" title="Themen" class="languagechoosea">Themen</a>
                                  <a href="http://www.miracleart.cn/de/wenda.html" title="Fragen und Antworten" class="languagechoosea">Fragen und Antworten</a>
                              </div>
                          </div>
                      </div>
      
                      <div   id="377j5v51b"   class="head_navs">
                          <a href="javascript:;" title="Lernen" class="head_nava head_nava-template1_1">Lernen</a>
                          <div   class="377j5v51b"   id="dropdown-template1_1" style="display: none;">
                              <div   id="377j5v51b"   class="languagechoose">
                                  <a href="http://www.miracleart.cn/de/course.html" title="Kurs" class="languagechoosea on">Kurs</a>
                                  <a href="http://www.miracleart.cn/de/dic/" title="Programmierw?rterbuch" class="languagechoosea">Programmierw?rterbuch</a>
                              </div>
                          </div>
                      </div>
      
                      <div   id="377j5v51b"   class="head_navs">
                          <a href="javascript:;" title="Tools-Bibliothek" class="head_nava head_nava-template1_2">Tools-Bibliothek</a>
                          <div   class="377j5v51b"   id="dropdown-template1_2" style="display: none;">
                              <div   id="377j5v51b"   class="languagechoose">
                                  <a href="http://www.miracleart.cn/de/toolset/development-tools" title="Entwicklungswerkzeuge" class="languagechoosea on">Entwicklungswerkzeuge</a>
                                  <a href="http://www.miracleart.cn/de/toolset/website-source-code" title="Quellcode der Website" class="languagechoosea">Quellcode der Website</a>
                                  <a href="http://www.miracleart.cn/de/toolset/php-libraries" title="PHP-Bibliotheken" class="languagechoosea">PHP-Bibliotheken</a>
                                  <a href="http://www.miracleart.cn/de/toolset/js-special-effects" title="JS-Spezialeffekte" class="languagechoosea on">JS-Spezialeffekte</a>
                                  <a href="http://www.miracleart.cn/de/toolset/website-materials" title="Website-Materialien" class="languagechoosea on">Website-Materialien</a>
                                  <a href="http://www.miracleart.cn/de/toolset/extension-plug-ins" title="Erweiterungs-Plug-Ins" class="languagechoosea on">Erweiterungs-Plug-Ins</a>
                              </div>
                          </div>
                      </div>
      
                      <div   id="377j5v51b"   class="head_navs">
                          <a href="http://www.miracleart.cn/de/ai" title="KI-Tools" class="head_nava head_nava-template1_3">KI-Tools</a>
                      </div>
      
                      <div   id="377j5v51b"   class="head_navs">
                          <a href="javascript:;" title="Freizeit" class="head_nava head_nava-template1_3">Freizeit</a>
                          <div   class="377j5v51b"   id="dropdown-template1_3" style="display: none;">
                              <div   id="377j5v51b"   class="languagechoose">
                                  <a href="http://www.miracleart.cn/de/game" title="Spiel-Download" class="languagechoosea on">Spiel-Download</a>
                                  <a href="http://www.miracleart.cn/de/mobile-game-tutorial/" title="Spiel-Tutorials" class="languagechoosea">Spiel-Tutorials</a>
      
                              </div>
                          </div>
                      </div>
                  </div>
              </div>
                          <div   id="377j5v51b"   class="head_search">
                      <input id="key_words"  onkeydown="if (event.keyCode == 13) searchs('de')" class="search-input" type="text" autocomplete="off" name="keywords" required="required" placeholder="Block,address,transaction,news" value="">
                      <a href="javascript:;" title="suchen"  onclick="searchs('de')"><img src="/static/imghw/find.png" alt="suchen"></a>
                  </div>
                      <div   id="377j5v51b"   class="head_right">
                  <div   id="377j5v51b"   class="haed_language">
                      <a href="javascript:;" class="layui-btn haed_language_btn">Deutsch<i class="layui-icon layui-icon-triangle-d"></i></a>
                      <div   class="377j5v51b"   id="dropdown-template" style="display: none;">
                          <div   id="377j5v51b"   class="languagechoose">
                                                      <a href="javascript:setlang('zh-cn');" title="簡體中文" class="languagechoosea">簡體中文</a>
                                                      <a href="javascript:setlang('en');" title="English" class="languagechoosea">English</a>
                                                      <a href="javascript:setlang('zh-tw');" title="繁體中文" class="languagechoosea">繁體中文</a>
                                                      <a href="javascript:setlang('ja');" title="日本語" class="languagechoosea">日本語</a>
                                                      <a href="javascript:setlang('ko');" title="???" class="languagechoosea">???</a>
                                                      <a href="javascript:setlang('ms');" title="Melayu" class="languagechoosea">Melayu</a>
                                                      <a href="javascript:setlang('fr');" title="Fran?ais" class="languagechoosea">Fran?ais</a>
                                                      <a href="javascript:;" title="Deutsch" class="languagechoosea">Deutsch</a>
                                                  </div>
                      </div>
                  </div>
                  <span id="377j5v51b"    class="head_right_line"></span>
                                  <div style="display: block;" id="login" class="haed_login ">
                          <a href="javascript:;"  title="Login" class="haed_logina ">Login</a>
                      </div>
                      <div style="display: block;" id="reg" class="head_signup login">
                          <a href="javascript:;"  title="singup" class="head_signupa">singup</a>
                      </div>
                  
              </div>
          </div>
      </header>
      
      	
      	<main>
      		<div   id="377j5v51b"   class="Article_Details_main">
      			<div   id="377j5v51b"   class="Article_Details_main1">
      							<div   id="377j5v51b"   class="Article_Details_main1M">
      					<div   id="377j5v51b"   class="phpgenera_Details_mainL1">
      						<a href="http://www.miracleart.cn/de/" title="Heim"
      							class="phpgenera_Details_mainL1a">Heim</a>
      						<img src="/static/imghw/top_right.png" alt="" />
      												<a href="http://www.miracleart.cn/de/php-tutorials.html"
      							class="phpgenera_Details_mainL1a">php教程</a>
      						<img src="/static/imghw/top_right.png" alt="" />
      												<a href="http://www.miracleart.cn/de/php-ercikaifa.html"
      							class="phpgenera_Details_mainL1a">PHP開發(fā)</a>
      						<img src="/static/imghw/top_right.png" alt="" />
      						<span>Klassisches Tutorial für den Einstieg in die Zend Framework-Entwicklung</span>
      					</div>
      					
      					<div   id="377j5v51b"   class="Articlelist_txts">
      						<div   id="377j5v51b"   class="Articlelist_txts_info">
      							<h1 class="Articlelist_txts_title">Klassisches Tutorial für den Einstieg in die Zend Framework-Entwicklung</h1>
      							<div   id="377j5v51b"   class="Articlelist_txts_info_head">
      								<div   id="377j5v51b"   class="author_info">
      									<a href="http://www.miracleart.cn/de/member/13.html"  class="author_avatar">
      									<img class="lazy"  data-src="https://img.php.cn/upload/avatar/000/000/013/6177b5643d1eb119.png" src="/static/imghw/default1.png" alt="高洛峰">
      									</a>
      									<div   id="377j5v51b"   class="author_detail">
      																			<a href="http://www.miracleart.cn/de/member/13.html" class="author_name">高洛峰</a>
                                      										</div>
      								</div>
                      			</div>
      							<span id="377j5v51b"    class="Articlelist_txts_time">Jan 05, 2017 am	 10:08 AM</span>
      														
      						</div>
      					</div>
      					<hr />
      					<div   id="377j5v51b"   class="article_main php-article">
      						<div   id="377j5v51b"   class="article-list-left detail-content-wrap content">
      						<ins class="adsbygoogle"
      							style="display:block; text-align:center;"
      							data-ad-layout="in-article"
      							data-ad-format="fluid"
      							data-ad-client="ca-pub-5902227090019525"
      							data-ad-slot="3461856641">
      						</ins>
      						
      
      					<p>Dieser Artikel beschreibt die Wissenspunkte im Zusammenhang mit dem Einstieg in die Zend Framework-Entwicklung. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt: </p>
      <p>Zend Framework wurde ver?ffentlicht! Obwohl es sich noch in einem frühen Entwicklungsstadium befindet, stellt dieses Tutorial einige der besten verfügbaren Funktionen vor und führt Sie durch die Erstellung eines einfachen Programms. </p>
      <p>Zend war der erste, der ZF in der Community ver?ffentlichte. Basierend auf der gleichen Idee wurde dieses Tutorial geschrieben, um die vorhandenen F?higkeiten von ZF zu demonstrieren. Da dieses Tutorial online ver?ffentlicht wird, werde ich es bei ZF-?nderungen aktualisieren, damit es so effizient wie m?glich ist. </p>
      <p>Anforderungen</p>
      <p>Zend Framework erfordert PHP5. Um den Code in diesem Tutorial optimal nutzen zu k?nnen, ben?tigen Sie au?erdem den Apache-Webserver. Weil das Demonstrationsprogramm (ein Nachrichtenverwaltungssystem) mod_rewrite verwendet. </p>
      <p>Der Code für dieses Tutorial kann kostenlos heruntergeladen werden, sodass Sie es selbst ausprobieren k?nnen. Sie k?nnen den Code von der Website von Brain Buld herunterladen: http://brainbulb.com/zend-framework-tutorial.tar.gz. </p>
      <p>ZF herunterladen</p>
      <p>Wenn Sie dieses Tutorial starten, müssen Sie die neueste Version von ZF herunterladen. Sie k?nnen einen Browser verwenden, um die tar.gz- oder ZIP-Datei manuell zum Herunterladen von http://framework.zend.com/download auszuw?hlen, oder den folgenden Befehl verwenden: </p><pre class='brush:php;toolbar:false;'>$ wget http://framework.zend.com/download/tgz
      $ tar -xvzf ZendFramework-0.1.2.tar.gz</pre><p>Tipp: Zend plant dies Die Bereitstellung eigener PEAR-Kan?le vereinfacht das Herunterladen. </p><p>Sobald Sie die Vorschauversion heruntergeladen haben, legen Sie das Bibliotheksverzeichnis an einem geeigneten Ort ab. In diesem Tutorial habe ich die Bibliothek in lib umbenannt, um eine übersichtliche Verzeichnisstruktur zu erhalten: </p><p>app/<br/> view/<br/> controllers/<br/>www/<br/> .htaccess<br/> index. php<br/>lib/</p><p>Das www-Verzeichnis ist das Stammverzeichnis des Dokuments, die Controller- und View-Verzeichnisse sind leere Verzeichnisse, die sp?ter verwendet werden, und das lib-Verzeichnis stammt aus der Vorschauversion, die Sie heruntergeladen haben. </p><p>Start</p><p>Die erste Komponente, die ich vorstellen m?chte, ist Zend_Controller. Es stellt in vielerlei Hinsicht die Grundlage für die von Ihnen entwickelten Programme dar und bestimmt teilweise auch, dass Zend Framework mehr als nur eine Sammlung von Komponenten ist. Sie müssen jedoch alle erhaltenen Anfragen in ein einfaches PHP-Skript einfügen, bevor Sie es verwenden k?nnen. Dieses Tutorial verwendet mod_rewrite. </p><p>Die Verwendung von mod_rewrite ist eine Kunst für sich, aber glücklicherweise ist diese spezielle Aufgabe überraschend einfach. Wenn Sie mit mod_rewrite oder der Apache-Konfiguration im Allgemeinen nicht vertraut sind, erstellen Sie eine .htaccess-Datei im Dokumentstamm und fügen Sie den folgenden Inhalt hinzu: </p><pre class='brush:php;toolbar:false;'>RewriteEngine on
      RewriteRule !/.(js|ico|gif|jpg|png|css)$ index.php</pre><p> </p><p></p><p> Tipp: Ein TODO-Punkt für Zend_Controller besteht darin, die Abh?ngigkeit von mod_rewrite zu entfernen. Um eine Vorschau des Beispiels bereitzustellen, verwendet dieses Tutorial mod_rewrite. </p><p>Wenn Sie diese Inhalte direkt zu httpd.conf hinzufügen, müssen Sie den Webserver neu starten. Wenn Sie jedoch eine .htaccess-Datei verwenden, müssen Sie nichts tun. Sie k?nnen einen schnellen Test durchführen, indem Sie einen bestimmten Text in index.php einfügen und auf einen beliebigen Pfad zugreifen, z. B. /foo/bar. Wenn Ihr Domainname example.org lautet, besuchen Sie http://example.org/foo/bar. </p><p>Sie müssen au?erdem den Pfad der ZF-Bibliothek auf include_path festlegen. Sie k?nnen es in php.ini festlegen oder den folgenden Inhalt direkt in Ihre .htaccess-Datei einfügen: </p><pre class='brush:php;toolbar:false;'>php_value include_path "/path/to/lib"</pre><p> </p><p></p><p>Zend</p><p>Zend Eine Klasse enth?lt eine Sammlung h?ufig verwendeter statischer Methoden. Hier ist die einzige Klasse, die Sie manuell hinzufügen müssen: </p><pre class='brush:php;toolbar:false;'><?php
      include &#39;Zend.php&#39;;
      ?></pre><p> </p><p></p><p> Sobald Sie Zend.php eingebunden haben, haben Sie alle Klassenmethoden der Zend-Klassen eingebunden. Sie k?nnen andere Klassen einfach mit loadClass() laden. Laden Sie beispielsweise die Zend_Controller_Front-Klasse: </p><pre class='brush:php;toolbar:false;'><?php
      include &#39;Zend.php&#39;;
      Zend::loadClass(&#39;Zend_Controller_Front&#39;);
      ?></pre><p> </p><p></p><p>include_path kann die Organisation und Verzeichnisstruktur von Loadclass() und ZF verstehen. Ich verwende es, um alle anderen Klassen zu laden. </p><p>Zend_Controller</p><p>Die Verwendung dieses Controllers ist sehr intuitiv. Tats?chlich habe ich beim Schreiben dieses Tutorials nicht auf die umfangreiche Dokumentation zurückgegriffen. </p><p>Tipps: Die Dokumentation ist derzeit unter http://framework.zend.com/manual/zend.controller.html verfügbar. </p><p>Ich habe zun?chst einen Front-Controller namens Zend_Controller_Front verwendet. Um zu verstehen, wie es funktioniert, fügen Sie den folgenden Code in Ihre index.php-Datei ein: </p><pre class='brush:php;toolbar:false;'><?php
      include &#39;Zend.php&#39;;
      Zend::loadClass(&#39;Zend_Controller_Front&#39;);
      $controller = Zend_Controller_Front::getInstance();
      $controller->setControllerDirectory(&#39;/path/to/controllers&#39;);
      $controller->dispatch();
      ?></pre><p> </p><p></p><p> Wenn Sie Objektverknüpfungen bevorzugen, k?nnen Sie den folgenden Code verwenden stattdessen: </p><pre class='brush:php;toolbar:false;'><?php
      include &#39;Zend.php&#39;;
      Zend::loadClass(&#39;Zend_Controller_Front&#39;);
      $controller = Zend_Controller_Front::getInstance()
             ->setControllerDirectory(&#39;/path/to/controllers&#39;)
             ->dispatch();
      ?></pre><p> </p><p></p><p>Wenn Sie nun auf /foo/bar zugreifen, tritt ein Fehler auf. Das stimmt! Es l?sst Sie wissen, was los ist. Das Hauptproblem besteht darin, dass die Datei IndexController.php nicht gefunden werden kann. </p><p>Bevor Sie diese Datei erstellen, sollten Sie zun?chst verstehen, wie die Regierung m?chte, dass Sie diese Dinge organisieren. ZF teilt die Zugriffsanfragen auf. Wenn Sie auf /foo/bar zugreifen, ist foo der Controller und bar die Aktion. Ihre Standardwerte sind alle index.</p><p>Wenn foo ein Controller ist, sucht ZF nach der Datei FooController.php im Controller-Verzeichnis. Da diese Datei nicht existiert, greift ZF auf IndexController.php zurück. Da keine Ergebnisse gefunden wurden, wurde ein Fehler gemeldet. </p><p>Als n?chstes erstellen Sie die Datei IndexController.php im Controller-Verzeichnis (kann mit setControllerDirectory() festgelegt werden): </p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      class IndexController extends Zend_Controller_Action
      {
        public function indexAction()
        {
          echo &#39;IndexController::indexAction()&#39;;
        }
      }
      ?></pre><p> </p><p></p><p>就如剛才說明的,IndexController類處理來自index controller或controller不存在的請求。indexAction()方法處理action為index的訪問。要記住的是index是controller和action的默認(rèn)值。如果你訪問/,/index或/index/index,indexAction()方法就會(huì)被執(zhí)行。 (最后面的斜杠并不會(huì)改變這個(gè)行為。) 而訪問其他任何資源只會(huì)導(dǎo)致出錯(cuò)。</p><p>在繼續(xù)做之前,還要在IndexController加上另外一個(gè)有用的類方法。不管什么時(shí)候訪問一個(gè)不存在的控制器,都要調(diào)用noRouteAction()類方法。例如,在FooController.php不存在的條件下,訪問/foo/bar就會(huì)執(zhí)行noRouteAction()。但是訪問/index/foo仍會(huì)出錯(cuò),因?yàn)閒oo是action,而不是controller.</p><p>將noRouteAction()添加到IndexController.php:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      class IndexController extends Zend_Controller_Action
      {
        public function indexAction()
        {
          echo &#39;IndexController::indexAction()&#39;;
        }
        public function noRouteAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>例子中使用$this->_redirect('/')來描述執(zhí)行noRouteAction()時(shí),可能發(fā)生的行為。這會(huì)將對不存在controllers的訪問重定向到根文檔(首頁)。</p><p>現(xiàn)在創(chuàng)建FooController.php:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      class FooController extends Zend_Controller_Action
      {
        public function indexAction()
        {
          echo &#39;FooController::indexAction()&#39;;
        }
        public function barAction()
        {
          echo &#39;FooController::barAction()&#39;;
        }
      }
      ?></pre><p>   </p><p></p><p>如果你再次訪問/foo/bar,你會(huì)發(fā)現(xiàn)執(zhí)行了barAction(),因?yàn)閎ar是action?,F(xiàn)在你不只支持了友好的URL,還可以只用幾行代碼就做得這么有條理??岚桑?br/>你也可以創(chuàng)建一個(gè)__call()類方法來處理像/foo/baz這樣未定義的action。</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      class FooController extends Zend_Controller_Action
      {
        public function indexAction()
        {
          echo &#39;FooController::indexAction()&#39;;
        }
        public function barAction()
        {
          echo &#39;FooController::barAction()&#39;;
        }
        public function __call($action, $arguments)
        {
          echo &#39;FooController:__call()&#39;;
        }
      }
      ?></pre><p>   </p><p></p><p>現(xiàn)在你只要幾行代碼就可以很好地處理用戶的訪問了,準(zhǔn)備好繼續(xù)。</p><p>Zend_View</p><p>Zend_View是一個(gè)用來幫助你組織好你的view邏輯的類。這對于模板-系統(tǒng)是不可知的,為了簡單起見,本教程不使用模板。如果你喜歡的話,不妨用一下。</p><p>記住,現(xiàn)在所有的訪問都是由front controller進(jìn)行處理。因此應(yīng)用框架已經(jīng)存在了,另外也必須遵守它。為了展示Zend_View的一個(gè)基本應(yīng)用,將IndexController.php修改如下:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      Zend::loadClass(&#39;Zend_View&#39;);
      class IndexController extends Zend_Controller_Action
      {
        public function indexAction()
        {
          $view = new Zend_View();
          $view->setScriptPath(&#39;/path/to/views&#39;);
          echo $view->render(&#39;example.php&#39;);
        }
        public function noRouteAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>在views目錄創(chuàng)建example.php文件:</p><pre class='brush:php;toolbar:false;'><html>
      <head>
        <title>This Is an Example</title>
      </head>
      <body>
        <p>This is an example.</p>
      </body>
      </html></pre><p>   </p><p></p><p>現(xiàn)在,如果你訪問自己網(wǎng)站的根資源,你會(huì)看到example.php的內(nèi)容。這仍沒什么用,但你要清楚你要在以一種結(jié)構(gòu)和組織非常清楚的方式在開發(fā)網(wǎng)絡(luò)應(yīng)用。</p><p>為了讓Zend_View的應(yīng)用更清楚一點(diǎn),,修改你的模板(example.php)包含以下內(nèi)容:</p><pre class='brush:php;toolbar:false;'><html>
      <head>
        <title><?php echo $this->escape($this->title); ?></title>
      </head>
      <body>
        <?php echo $this->escape($this->body); ?>
      </body>
      </html></pre><p>   </p><p></p><p>現(xiàn)在已經(jīng)添加了兩個(gè)功能。$this->escape()類方法用于所有的輸出。即使你自己創(chuàng)建輸出,就像這個(gè)例子一樣。避開所有輸出也是一個(gè)很好的習(xí)慣,它可以在默認(rèn)情況下幫助你防止跨站腳本攻擊(XSS)。</p><p>$this->title和$this->body屬性用來展示動(dòng)態(tài)數(shù)據(jù)。這些也可以在controller中定義,所以我們修改IndexController.php以指定它們:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      Zend::loadClass(&#39;Zend_View&#39;);
      class IndexController extends Zend_Controller_Action
      {
        public function indexAction()
        {
          $view = new Zend_View();
          $view->setScriptPath(&#39;/path/to/views&#39;);
          $view->title = &#39;Dynamic Title&#39;;
          $view->body = &#39;This is a dynamic body.&#39;;
          echo $view->render(&#39;example.php&#39;);
        }
        public function noRouteAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>現(xiàn)在你再次訪問根目錄,應(yīng)該就可以看到模板所使用的這些值了。因?yàn)槟阍谀0逯惺褂玫?this就是在Zend_View范圍內(nèi)所執(zhí)行的實(shí)例。</p><p>要記住example.php只是一個(gè)普通的PHP腳本,所以你完全可以做你想做的。只是應(yīng)努力只在要求顯示數(shù)據(jù)時(shí)才使用模板。你的controller (controller分發(fā)的模塊)應(yīng)處理你全部的業(yè)務(wù)邏輯。</p><p>在繼續(xù)之前,我想做最后一個(gè)關(guān)于Zend_View的提示。在controller的每個(gè)類方法內(nèi)初始化$view對象需要額外輸入一些內(nèi)容,而我們的主要目標(biāo)是讓快速開發(fā)網(wǎng)絡(luò)應(yīng)用更簡單。如果所有模板都放在一個(gè)目錄下,是否要在每個(gè)例子中都調(diào)用setScriptPath()也存在爭議。</p><p>幸運(yùn)的是,Zend類包含了一個(gè)寄存器來幫助減少工作量。你可以用register()方法把你的$view對象存儲(chǔ)在寄存器:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::register(&#39;view&#39;, $view);
      ?></pre><p>   </p><p></p><p>用registry()方法進(jìn)行檢索:</p><pre class='brush:php;toolbar:false;'><?php
      $view = Zend::registry(&#39;view&#39;);
      ?></pre><p>   </p><p></p><p>基于這點(diǎn),本教程使用寄存器。 </p><p>Zend_InputFilter</p><p>本教程討論的最后一個(gè)組件是Zend_InputFilter。這個(gè)類提供了一種簡單而有效的輸入過濾方法。你可以通過提供一組待過濾數(shù)據(jù)來進(jìn)行初始化。</p><pre class='brush:php;toolbar:false;'><?php
      $filterPost = new Zend_InputFilter($_POST);
      ?></pre><p>   </p><p></p><p>這會(huì)將($_POST)設(shè)置為NULL,所以就不能直接進(jìn)入了。Zend_InputFilter提供了一個(gè)簡單、集中的根據(jù)特定規(guī)則過濾數(shù)據(jù)的類方法集。例如,你可以用getAlpha()來獲取$_POST['name']中的字母:</p><pre class='brush:php;toolbar:false;'><?php
      /* $_POST[&#39;name&#39;] = &#39;John123Doe&#39;; */
      $filterPost = new Zend_InputFilter($_POST);
      /* $_POST = NULL; */
      $alphaName = $filterPost->getAlpha(&#39;name&#39;);
      /* $alphaName = &#39;JohnDoe&#39;; */
      ?></pre><p>   </p><p></p><p>每一個(gè)類方法的參數(shù)都是對應(yīng)要過濾的元素的關(guān)鍵詞。對象(例子中的$filterPost)可以保護(hù)數(shù)據(jù)不被篡改,并能更好地控制對數(shù)據(jù)的操作及一致性。因此,當(dāng)你操縱輸入數(shù)據(jù),應(yīng)始終使用Zend_InputFilter。</p><p>提示:Zend_Filter提供與Zend_InputFilter方法一樣的靜態(tài)方法。</p><p>構(gòu)建新聞管理系統(tǒng)</p><p>雖然預(yù)覽版提供了許多組件(甚至許多已經(jīng)被開發(fā)),我們已經(jīng)討論了構(gòu)建一個(gè)簡單程序所需要的全部組件。在這里,你會(huì)對ZF的基本結(jié)構(gòu)和設(shè)計(jì)有更清楚的理解。</p><p>每個(gè)人開發(fā)的程序都會(huì)有所不同,而Zend Framework試圖包容這些差異。同樣,這個(gè)教程是根據(jù)我的喜好寫的,請根據(jù)自己的偏好自行調(diào)整。</p><p>當(dāng)我開發(fā)程序時(shí),我會(huì)先做界面。這并不意味著我把時(shí)間都花在標(biāo)簽、樣式表和圖片上,而是我從一個(gè)用戶的角度去考慮問題。因此我把程序看成是頁面的集合,每一頁都是一個(gè)獨(dú)立的網(wǎng)址。這個(gè)新聞系統(tǒng)就是由以下網(wǎng)址組成的:</p><p>/<br/>/add/news<br/>/add/comment<br/>/admin<br/>/admin/approve<br/>/view/{id}</p><p>你可以直接把這些網(wǎng)址和controller聯(lián)系起來。IndexController列出新聞,AddController添加新聞和評(píng)論,AdminController處理一些如批準(zhǔn)新聞之類的管理,ViewController特定新聞和對應(yīng)評(píng)論的顯示。</p><p>如果你的FooController.php還在,把它刪除。修改IndexController.php,為業(yè)務(wù)邏輯以添加相應(yīng)的action和一些注釋:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      class IndexController extends Zend_Controller_Action
      {
        public function indexAction()
        {
          /* List the news. */
        }
        public function noRouteAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>接下來,創(chuàng)建AddController.php文件:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      class AddController extends Zend_Controller_Action
      {
        function indexAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
        function commentAction()
        {
          /* Add a comment. */
        }
        function newsAction()
        {
          /* Add news. */
        }
        function __call($action, $arguments)
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>記住AddController的indexAction()方法不能調(diào)用。當(dāng)訪問/add時(shí)會(huì)執(zhí)行這個(gè)類方法。因?yàn)橛脩艨梢允止ぴL問這個(gè)網(wǎng)址,這是有可能的,所以你要把用戶重定向到主頁、顯示錯(cuò)誤或你認(rèn)為合適的行為。</p><p>接下來,創(chuàng)建AdminController.php文件:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      class AdminController extends Zend_Controller_Action
      {
        function indexAction()
        {
          /* Display admin interface. */
        }
        function approveAction()
        {
          /* Approve news. */
        }
        function __call($action, $arguments)
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>最后,創(chuàng)建ViewController.php文件:</p><pre class='brush:php;toolbar:false;'><?php
      Zend::loadClass(&#39;Zend_Controller_Action&#39;);
      class ViewController extends Zend_Controller_Action
      {
        function indexAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
        function __call($id, $arguments)
        {
          /* Display news and comments for $id. */
        }
      }
      ?></pre><p>   </p><p></p><p>和AddController一樣,index()方法不能調(diào)用,所以你可以使用你認(rèn)為合適的action。ViewController和其它的有點(diǎn)不同,因?yàn)槟悴恢朗裁床攀怯行У腶ction。為了支持像/view/23這樣的網(wǎng)址,你要使用__call()來支持動(dòng)態(tài)action。</p><p>數(shù)據(jù)庫操作</p><p>因?yàn)閆end Framework的數(shù)據(jù)庫組件還不穩(wěn)定,而我希望這個(gè)演示可以做得簡單一點(diǎn)。我使用了一個(gè)簡單的類,用SQLite進(jìn)行新聞條目和評(píng)論的存儲(chǔ)和查詢。</p><pre class='brush:php;toolbar:false;'><?php
      class Database
      {
        private $_db;
        public function __construct($filename)
        {
          $this->_db = new SQLiteDatabase($filename);
        }
        public function addComment($name, $comment, $newsId)
        {
          $name = sqlite_escape_string($name);
          $comment = sqlite_escape_string($comment);
          $newsId = sqlite_escape_string($newsId);
          $sql = "INSERT
              INTO  comments (name, comment, newsId)
              VALUES (&#39;$name&#39;, &#39;$comment&#39;, &#39;$newsId&#39;)";
          return $this->_db->query($sql);
        }
        public function addNews($title, $content)
        {
          $title = sqlite_escape_string($title);
          $content = sqlite_escape_string($content);
          $sql = "INSERT
              INTO  news (title, content)
              VALUES (&#39;$title&#39;, &#39;$content&#39;)";
          return $this->_db->query($sql);
        }
        public function approveNews($ids)
        {
          foreach ($ids as $id) {
            $id = sqlite_escape_string($id);
            $sql = "UPDATE news
                SET  approval = &#39;T&#39;
                WHERE id = &#39;$id&#39;";
            if (!$this->_db->query($sql)) {
              return FALSE;
            }
          }
          return TRUE;
        }
        public function getComments($newsId)
        {
          $newsId = sqlite_escape_string($newsId);
          $sql = "SELECT name, comment
              FROM  comments
              WHERE newsId = &#39;$newsId&#39;";
          if ($result = $this->_db->query($sql)) {
            return $result->fetchAll();
          }
          return FALSE;
        }
        public function getNews($id = &#39;ALL&#39;)
        {
          $id = sqlite_escape_string($id);
          switch ($id) {
            case &#39;ALL&#39;:
              $sql = "SELECT id,
                      title
                  FROM  news
                  WHERE approval = &#39;T&#39;";
              break;
            case &#39;NEW&#39;:
              $sql = "SELECT *
                  FROM  news
                  WHERE approval != &#39;T&#39;";
              break;
            default:
              $sql = "SELECT *
                  FROM  news
                  WHERE id = &#39;$id&#39;";
              break;
          }
          if ($result = $this->_db->query($sql)) {
            if ($result->numRows() != 1) {
              return $result->fetchAll();
            } else {
              return $result->fetch();
            }
          }
          return FALSE;
        }
      }
      ?></pre><p>   </p><p></p><p>(你可以用自己的解決方案隨意替換這個(gè)類。這里只是為你提供一個(gè)完整示例的介紹,并非建議要這么實(shí)現(xiàn)。)</p><p>這個(gè)類的構(gòu)造器需要SQLite數(shù)據(jù)庫的完整路徑和文件名,你必須自己進(jìn)行創(chuàng)建。</p><pre class='brush:php;toolbar:false;'><?php
      $db = new SQLiteDatabase(&#39;/path/to/db.sqlite&#39;);
      $db->query("CREATE TABLE news (
          id    INTEGER PRIMARY KEY,
          title  VARCHAR(255),
          content TEXT,
          approval CHAR(1) DEFAULT &#39;F&#39;
        )");
      $db->query("CREATE TABLE comments (
          id    INTEGER PRIMARY KEY,
          name   VARCHAR(255),
          comment TEXT,
          newsId  INTEGER
        )");
      ?></pre><p>   </p><p></p><p>你只需要做一次,以后直接給出Database類構(gòu)造器的完整路徑和文件名即可:</p><pre class='brush:php;toolbar:false;'><?php
      $db = new Database(&#39;/path/to/db.sqlite&#39;);
      ?></pre><p>   </p><p></p><p>整合</p><p>為了進(jìn)行整合,在lib目錄下創(chuàng)建Database.php,loadClass()就可以找到它。你的index.php文件現(xiàn)在就會(huì)初始化$view和$db并存儲(chǔ)到寄存器。你也可以創(chuàng)建__autoload()函數(shù)自動(dòng)加載你所需要的類:</p><pre class='brush:php;toolbar:false;'><?php
      include &#39;Zend.php&#39;;
      function __autoload($class)
      {
        Zend::loadClass($class);
      }
      $db = new Database(&#39;/path/to/db.sqlite&#39;);
      Zend::register(&#39;db&#39;, $db);
      $view = new Zend_View;
      $view->setScriptPath(&#39;/path/to/views&#39;);
      Zend::register(&#39;view&#39;, $view);
      $controller = Zend_Controller_Front::getInstance()
             ->setControllerDirectory(&#39;/path/to/controllers&#39;)
             ->dispatch();
      ?></pre><p>   </p><p></p><p>接下來,在views目錄創(chuàng)建一些簡單的模板。index.php可以用來顯示index視圖:</p><pre class='brush:php;toolbar:false;'><html>
      <head>
       <title>News</title>
      </head>
      <body>
       <h1>News</h1>
       <?php foreach ($this->news as $entry) { ?>
       <p>
        <a href="/view/<?php echo $this->escape($entry[&#39;id&#39;]); ?>">
        <?php echo $this->escape($entry[&#39;title&#39;]); ?>
        </a>
       </p>
       <?php } ?>
       <h1>Add News</h1>
       <form action="/add/news" method="POST">
       <p>Title:<br /><input type="text" name="title" /></p>
       <p>Content:<br /><textarea name="content"></textarea></p>
       <p><input type="submit" value="Add News" /></p>
       </form>
      </body>
      </html></pre><p>   </p><p></p><p>view.php模板可以用來顯示選定的新聞條目:</p><pre class='brush:php;toolbar:false;'><html>
      <head>
       <title>
        <?php echo $this->escape($this->news[&#39;title&#39;]); ?>
       </title>
      </head>
      <body>
       <h1>
        <?php echo $this->escape($this->news[&#39;title&#39;]); ?>
       </h1>
       <p>
        <?php echo $this->escape($this->news[&#39;content&#39;]); ?>
       </p>
       <h1>Comments</h1>
       <?php foreach ($this->comments as $comment) { ?>
       <p>
        <?php echo $this->escape($comment[&#39;name&#39;]); ?> writes:
       </p>
       <blockquote>
        <?php echo $this->escape($comment[&#39;comment&#39;]); ?>
       </blockquote>
       <?php } ?>
       <h1>Add a Comment</h1>
       <form action="/add/comment" method="POST">
       <input type="hidden" name="newsId"
        value="<?php echo $this->escape($this->id); ?>" />
       <p>Name:<br /><input type="text" name="name" /></p>
       <p>Comment:<br /><textarea name="comment"></textarea></p>
       <p><input type="submit" value="Add Comment" /></p>
       </form>
      </body>
      </html></pre><p>   </p><p></p><p>最后,admin.php模板可以用來批準(zhǔn)新聞條目:</p><pre class='brush:php;toolbar:false;'><html>
      <head>
       <title>News Admin</title>
      </head>
      <body>
       <form action="/admin/approve" method="POST">
       <?php foreach ($this->news as $entry) { ?>
       <p>
        <input type="checkbox" name="ids[]"
        value="<?php echo $this->escape($entry[&#39;id&#39;]); ?>" />
        <?php echo $this->escape($entry[&#39;title&#39;]); ?>
        <?php echo $this->escape($entry[&#39;content&#39;]); ?>
       </p>
       <?php } ?>
       <p>
        Password:<br /><input type="password" name="password" />
       </p>
       <p><input type="submit" value="Approve" /></p>
       </form>
      </body>
      </html></pre><p>   </p><p></p><p>提示:為了保持簡單,這個(gè)表單用密碼作為驗(yàn)證機(jī)制。</p><p>使用到模板的地方,你只需要把注釋替換成幾行代碼。如IndexController.php就變成下面這樣:</p><pre class='brush:php;toolbar:false;'><?php
      class IndexController extends Zend_Controller_Action
      {
        public function indexAction()
        {
          /* List the news. */
          $db = Zend::registry(&#39;db&#39;);
          $view = Zend::registry(&#39;view&#39;);
          $view->news = $db->getNews();
          echo $view->render(&#39;index.php&#39;);
        }
        public function noRouteAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>因?yàn)闂l理比較清楚,這個(gè)程序首頁的整個(gè)業(yè)務(wù)邏輯只有四行代碼。AddController.php更復(fù)雜一點(diǎn),它需要更多的代碼:</p><pre class='brush:php;toolbar:false;'><?php
      class AddController extends Zend_Controller_Action
      {
        function indexAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
        function commentAction()
        {
          /* Add a comment. */
          $filterPost = new Zend_InputFilter($_POST);
          $db = Zend::registry(&#39;db&#39;);
          $name = $filterPost->getAlpha(&#39;name&#39;);
          $comment = $filterPost->noTags(&#39;comment&#39;);
          $newsId = $filterPost->getDigits(&#39;newsId&#39;);
          $db->addComment($name, $comment, $newsId);
          $this->_redirect("/view/$newsId");
        }
        function newsAction()
        {
          /* Add news. */
          $filterPost = new Zend_InputFilter($_POST);
          $db = Zend::registry(&#39;db&#39;);
          $title = $filterPost->noTags(&#39;title&#39;);
          $content = $filterPost->noTags(&#39;content&#39;);
          $db->addNews($title, $content);
          $this->_redirect(&#39;/&#39;);
        }
        function __call($action, $arguments)
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>因?yàn)橛脩粼谔峤槐韱魏蟊恢囟ㄏ?,這個(gè)controller不需要視圖。</p><p>在AdminController.php,你要處理顯示管理界面和批準(zhǔn)新聞兩個(gè)action:</p><pre class='brush:php;toolbar:false;'><?php
      class AdminController extends Zend_Controller_Action
      {
        function indexAction()
        {
          /* Display admin interface. */
          $db = Zend::registry(&#39;db&#39;);
          $view = Zend::registry(&#39;view&#39;);
          $view->news = $db->getNews(&#39;NEW&#39;);
          echo $view->render(&#39;admin.php&#39;);
        }
        function approveAction()
        {
          /* Approve news. */
          $filterPost = new Zend_InputFilter($_POST);
          $db = Zend::registry(&#39;db&#39;);
          if ($filterPost->getRaw(&#39;password&#39;) == &#39;mypass&#39;) {
            $db->approveNews($filterPost->getRaw(&#39;ids&#39;));
            $this->_redirect(&#39;/&#39;);
          } else {
            echo &#39;The password is incorrect.&#39;;
          }
        }
        function __call($action, $arguments)
        {
          $this->_redirect(&#39;/&#39;);
        }
      }
      ?></pre><p>   </p><p></p><p>最后是ViewController.php:</p><pre class='brush:php;toolbar:false;'><?php
      class ViewController extends Zend_Controller_Action
      {
        function indexAction()
        {
          $this->_redirect(&#39;/&#39;);
        }
        function __call($id, $arguments)
        {
          /* Display news and comments for $id. */
          $id = Zend_Filter::getDigits($id);
          $db = Zend::registry(&#39;db&#39;);
          $view = Zend::registry(&#39;view&#39;);
          $view->news = $db->getNews($id);
          $view->comments = $db->getComments($id);
          $view->id = $id;
          echo $view->render(&#39;view.php&#39;);
        }
      }
      ?></pre><p>? ?</p>
      <p></p>
      <p>雖然很簡單,但我們還是提供了一個(gè)功能較全的新聞和評(píng)論程序。最好的地方是由于有較好的設(shè)計(jì),增加功能變得很簡單。而且隨著Zend Framework越來越成熟,只會(huì)變得更好。</p>
      <p>更多信息</p>
      <p>這個(gè)教程只是討論了ZF表面的一些功能,但現(xiàn)在也有一些其它的資源可供參考。在http://framework.zend.com/manual/有手冊可以查詢,Rob Allen在http://akrabat.com/zend-framework/介紹了一些他使用Zend Framework的經(jīng)驗(yàn),而Richard Thomas也在http://www.cyberlot.net/zendframenotes提供了一些有用的筆記。如果你有自己的想法,可以訪問Zend Framework的新論壇:http://www.phparch.com/discuss/index.php/f/289//。</p>
      <p>結(jié)束語</p>
      <p>要對預(yù)覽版進(jìn)行評(píng)價(jià)是很容易的事,我在寫這個(gè)教程時(shí)也遇到很多困難??偟膩碚f,我想Zend Framework顯示了承諾,加入的每個(gè)人都是想繼續(xù)完善它。</p>
      <p>Ich hoffe, dass dieser Artikel für jedermann bei der PHP-Programmierung basierend auf dem Zend Framework-Framework hilfreich sein wird. </p>
      <p>Weitere Artikel zu Einführungs-Klassiker-Tutorials zur Zend Framework-Entwicklung finden Sie auf der chinesischen PHP-Website! </p>
      
      
      						</div>
      					</div>
      					<div   id="377j5v51b"   class="wzconShengming_sp">
      						<div   id="377j5v51b"   class="bzsmdiv_sp">Erkl?rung dieser Website</div>
      						<div>Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn</div>
      					</div>
      				</div>
      
      				<ins class="adsbygoogle"
           style="display:block"
           data-ad-format="autorelaxed"
           data-ad-client="ca-pub-5902227090019525"
           data-ad-slot="2507867629"></ins>
      
      
      
      				<div   id="377j5v51b"   class="AI_ToolDetails_main4sR">
      
      
      				<ins class="adsbygoogle"
              style="display:block"
              data-ad-client="ca-pub-5902227090019525"
              data-ad-slot="3653428331"
              data-ad-format="auto"
              data-full-width-responsive="true"></ins>
          
      
      
      					<!-- <div   id="377j5v51b"   class="phpgenera_Details_mainR4">
      						<div   id="377j5v51b"   class="phpmain1_4R_readrank">
      							<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
      								<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      									onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      									src="/static/imghw/hotarticle2.png" alt="" />
      								<h2>Hei?er Artikel</h2>
      							</div>
      							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796832397.html" title="Gras Wonder Build Guide | Uma Musume hübsches Derby" class="phpgenera_Details_mainR4_bottom_title">Gras Wonder Build Guide | Uma Musume hübsches Derby</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>1 Monate vor</span>
      										<span>By Jack chen</span>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796833110.html" title="<??>: 99 N?chte im Wald - alle Abzeichen und wie man sie freischalt" class="phpgenera_Details_mainR4_bottom_title"><??>: 99 N?chte im Wald - alle Abzeichen und wie man sie freischalt</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>4 Wochen vor</span>
      										<span>By DDD</span>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796831605.html" title="Uma Musume Pretty Derby Banner Zeitplan (Juli 2025)" class="phpgenera_Details_mainR4_bottom_title">Uma Musume Pretty Derby Banner Zeitplan (Juli 2025)</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>1 Monate vor</span>
      										<span>By Jack chen</span>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796836699.html" title="Rimworld Odyssey -Temperaturführer für Schiffe und Gravtech" class="phpgenera_Details_mainR4_bottom_title">Rimworld Odyssey -Temperaturführer für Schiffe und Gravtech</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>3 Wochen vor</span>
      										<span>By Jack chen</span>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796831905.html" title="Windows Security ist leer oder keine Optionen angezeigt" class="phpgenera_Details_mainR4_bottom_title">Windows Security ist leer oder keine Optionen angezeigt</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>1 Monate vor</span>
      										<span>By 下次還敢</span>
      									</div>
      								</div>
      														</div>
      							<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
      								<a href="http://www.miracleart.cn/de/article.html">Mehr anzeigen</a>
      							</div>
      						</div>
      					</div> -->
      
      
      											<div   id="377j5v51b"   class="phpgenera_Details_mainR3">
      							<div   id="377j5v51b"   class="phpmain1_4R_readrank">
      								<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
      									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      										onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      										src="/static/imghw/hottools2.png" alt="" />
      									<h2>Hei?e KI -Werkzeuge</h2>
      								</div>
      								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_bottom">
      																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/ai/undress-ai-tool" title="Undress AI Tool" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173410641626608.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Undress AI Tool" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/ai/undress-ai-tool" title="Undress AI Tool" class="phpmain_tab2_mids_title">
      													<h3>Undress AI Tool</h3>
      												</a>
      												<p>Ausziehbilder kostenlos</p>
      											</div>
      										</div>
      																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/ai/undresserai-undress" title="Undresser.AI Undress" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411540686492.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Undresser.AI Undress" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/ai/undresserai-undress" title="Undresser.AI Undress" class="phpmain_tab2_mids_title">
      													<h3>Undresser.AI Undress</h3>
      												</a>
      												<p>KI-gestützte App zum Erstellen realistischer Aktfotos</p>
      											</div>
      										</div>
      																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/ai/ai-clothes-remover" title="AI Clothes Remover" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411552797167.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="AI Clothes Remover" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/ai/ai-clothes-remover" title="AI Clothes Remover" class="phpmain_tab2_mids_title">
      													<h3>AI Clothes Remover</h3>
      												</a>
      												<p>Online-KI-Tool zum Entfernen von Kleidung aus Fotos.</p>
      											</div>
      										</div>
      																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/ai/clothoffio" title="Clothoff.io" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411529149311.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Clothoff.io" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/ai/clothoffio" title="Clothoff.io" class="phpmain_tab2_mids_title">
      													<h3>Clothoff.io</h3>
      												</a>
      												<p>KI-Kleiderentferner</p>
      											</div>
      										</div>
      																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/ai/video-swap" title="Video Face Swap" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173414504068133.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Video Face Swap" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/ai/video-swap" title="Video Face Swap" class="phpmain_tab2_mids_title">
      													<h3>Video Face Swap</h3>
      												</a>
      												<p>Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!</p>
      											</div>
      										</div>
      																</div>
      								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
      									<a href="http://www.miracleart.cn/de/ai">Mehr anzeigen</a>
      								</div>
      							</div>
      						</div>
      					
      
      
      					<div   id="377j5v51b"   class="phpgenera_Details_mainR4">
      						<div   id="377j5v51b"   class="phpmain1_4R_readrank">
      							<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
      								<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      									onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      									src="/static/imghw/hotarticle2.png" alt="" />
      								<h2>Hei?er Artikel</h2>
      							</div>
      							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796832397.html" title="Gras Wonder Build Guide | Uma Musume hübsches Derby" class="phpgenera_Details_mainR4_bottom_title">Gras Wonder Build Guide | Uma Musume hübsches Derby</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>1 Monate vor</span>
      										<span>By Jack chen</span>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796833110.html" title="<??>: 99 N?chte im Wald - alle Abzeichen und wie man sie freischalt" class="phpgenera_Details_mainR4_bottom_title"><??>: 99 N?chte im Wald - alle Abzeichen und wie man sie freischalt</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>4 Wochen vor</span>
      										<span>By DDD</span>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796831605.html" title="Uma Musume Pretty Derby Banner Zeitplan (Juli 2025)" class="phpgenera_Details_mainR4_bottom_title">Uma Musume Pretty Derby Banner Zeitplan (Juli 2025)</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>1 Monate vor</span>
      										<span>By Jack chen</span>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796836699.html" title="Rimworld Odyssey -Temperaturführer für Schiffe und Gravtech" class="phpgenera_Details_mainR4_bottom_title">Rimworld Odyssey -Temperaturführer für Schiffe und Gravtech</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>3 Wochen vor</span>
      										<span>By Jack chen</span>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/1796831905.html" title="Windows Security ist leer oder keine Optionen angezeigt" class="phpgenera_Details_mainR4_bottom_title">Windows Security ist leer oder keine Optionen angezeigt</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<span>1 Monate vor</span>
      										<span>By 下次還敢</span>
      									</div>
      								</div>
      														</div>
      							<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
      								<a href="http://www.miracleart.cn/de/article.html">Mehr anzeigen</a>
      							</div>
      						</div>
      					</div>
      
      
      											<div   id="377j5v51b"   class="phpgenera_Details_mainR3">
      							<div   id="377j5v51b"   class="phpmain1_4R_readrank">
      								<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
      									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      										onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      										src="/static/imghw/hottools2.png" alt="" />
      									<h2>Hei?e Werkzeuge</h2>
      								</div>
      								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_bottom">
      																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/toolset/development-tools/92" title="Notepad++7.3.1" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58ab96f0f39f7357.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Notepad++7.3.1" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/toolset/development-tools/92" title="Notepad++7.3.1" class="phpmain_tab2_mids_title">
      													<h3>Notepad++7.3.1</h3>
      												</a>
      												<p>Einfach zu bedienender und kostenloser Code-Editor</p>
      											</div>
      										</div>
      																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/toolset/development-tools/93" title="SublimeText3 chinesische Version" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58ab97a3baad9677.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="SublimeText3 chinesische Version" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/toolset/development-tools/93" title="SublimeText3 chinesische Version" class="phpmain_tab2_mids_title">
      													<h3>SublimeText3 chinesische Version</h3>
      												</a>
      												<p>Chinesische Version, sehr einfach zu bedienen</p>
      											</div>
      										</div>
      																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/toolset/development-tools/121" title="Senden Sie Studio 13.0.1" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58ab97ecd1ab2670.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Senden Sie Studio 13.0.1" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/toolset/development-tools/121" title="Senden Sie Studio 13.0.1" class="phpmain_tab2_mids_title">
      													<h3>Senden Sie Studio 13.0.1</h3>
      												</a>
      												<p>Leistungsstarke integrierte PHP-Entwicklungsumgebung</p>
      											</div>
      										</div>
      																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/toolset/development-tools/469" title="Dreamweaver CS6" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58d0e0fc74683535.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Dreamweaver CS6" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/toolset/development-tools/469" title="Dreamweaver CS6" class="phpmain_tab2_mids_title">
      													<h3>Dreamweaver CS6</h3>
      												</a>
      												<p>Visuelle Webentwicklungstools</p>
      											</div>
      										</div>
      																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
      											<a href="http://www.miracleart.cn/de/toolset/development-tools/500" title="SublimeText3 Mac-Version" class="phpmain_tab2_mids_top_img">
      												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58d34035e2757995.png?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="SublimeText3 Mac-Version" />
      											</a>
      											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
      												<a href="http://www.miracleart.cn/de/toolset/development-tools/500" title="SublimeText3 Mac-Version" class="phpmain_tab2_mids_title">
      													<h3>SublimeText3 Mac-Version</h3>
      												</a>
      												<p>Codebearbeitungssoftware auf Gottesniveau (SublimeText3)</p>
      											</div>
      										</div>
      																	</div>
      								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
      									<a href="http://www.miracleart.cn/de/ai">Mehr anzeigen</a>
      								</div>
      							</div>
      						</div>
      										
      
      					
      					<div   id="377j5v51b"   class="phpgenera_Details_mainR4">
      						<div   id="377j5v51b"   class="phpmain1_4R_readrank">
      							<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
      								<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      									onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
      									src="/static/imghw/hotarticle2.png" alt="" />
      								<h2>Hei?e Themen</h2>
      							</div>
      							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/laravel-tutori" title="Laravel-Tutorial" class="phpgenera_Details_mainR4_bottom_title">Laravel-Tutorial</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_infos">
      											<img src="/static/imghw/eyess.png" alt="" />
      											<span>1601</span>
      										</div>
      										<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_infos">
      											<img src="/static/imghw/tiezi.png" alt="" />
      											<span>29</span>
      										</div>
      									</div>
      								</div>
      															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
      									<a href="http://www.miracleart.cn/de/faq/php-tutorial" title="PHP-Tutorial" class="phpgenera_Details_mainR4_bottom_title">PHP-Tutorial</a>
      									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
      										<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_infos">
      											<img src="/static/imghw/eyess.png" alt="" />
      											<span>1502</span>
      										</div>
      										<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_infos">
      											<img src="/static/imghw/tiezi.png" alt="" />
      											<span>276</span>
      										</div>
      									</div>
      								</div>
      														</div>
      							<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
      								<a href="http://www.miracleart.cn/de/faq/zt">Mehr anzeigen</a>
      							</div>
      						</div>
      					</div>
      				</div>
      			</div>
      					</div>
      	</main>
      	<footer>
          <div   id="377j5v51b"   class="footer">
              <div   id="377j5v51b"   class="footertop">
                  <img src="/static/imghw/logo.png" alt="">
                  <p>Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!</p>
              </div>
              <div   id="377j5v51b"   class="footermid">
                  <a href="http://www.miracleart.cn/de/about/us.html">über uns</a>
                  <a href="http://www.miracleart.cn/de/about/disclaimer.html">Haftungsausschluss</a>
                  <a href="http://www.miracleart.cn/de/update/article_0_1.html">Sitemap</a>
              </div>
              <div   id="377j5v51b"   class="footerbottom">
                  <p>
                      ? php.cn All rights reserved
                  </p>
              </div>
          </div>
      </footer>
      
      <input type="hidden" id="verifycode" value="/captcha.html">
      
      
      
      
      		<link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css?2' type='text/css' media='all' />
      	
      	
      	
      	
      	
      
      	
      	
      
      
      
      
      
      
      <footer>
      <div class="friendship-link">
      <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p>
      <a href="http://www.miracleart.cn/" title="国产av日韩一区二区三区精品">国产av日韩一区二区三区精品</a>
      
      <div class="friend-links">
      
      
      </div>
      </div>
      
      </footer>
      
      
      <script>
      (function(){
          var bp = document.createElement('script');
          var curProtocol = window.location.protocol.split(':')[0];
          if (curProtocol === 'https') {
              bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
          }
          else {
              bp.src = 'http://push.zhanzhang.baidu.com/push.js';
          }
          var s = document.getElementsByTagName("script")[0];
          s.parentNode.insertBefore(bp, s);
      })();
      </script>
      </body><div id="rpbp1" class="pl_css_ganrao" style="display: none;"><strong id="rpbp1"></strong><ruby id="rpbp1"><dl id="rpbp1"><sup id="rpbp1"><strong id="rpbp1"></strong></sup></dl></ruby><p id="rpbp1"></p><i id="rpbp1"></i><mark id="rpbp1"></mark><rp id="rpbp1"></rp><menuitem id="rpbp1"></menuitem><optgroup id="rpbp1"></optgroup><optgroup id="rpbp1"></optgroup><strong id="rpbp1"><menuitem id="rpbp1"></menuitem></strong><tt id="rpbp1"><strike id="rpbp1"></strike></tt><fieldset id="rpbp1"></fieldset><big id="rpbp1"><video id="rpbp1"></video></big><span id="rpbp1"></span><div id="rpbp1"></div><tfoot id="rpbp1"><track id="rpbp1"></track></tfoot><pre id="rpbp1"></pre><pre id="rpbp1"><var id="rpbp1"><font id="rpbp1"><object id="rpbp1"></object></font></var></pre><kbd id="rpbp1"><strong id="rpbp1"><rp id="rpbp1"></rp></strong></kbd><progress id="rpbp1"><track id="rpbp1"><span id="rpbp1"><noframes id="rpbp1"></noframes></span></track></progress><listing id="rpbp1"></listing><mark id="rpbp1"><listing id="rpbp1"></listing></mark><i id="rpbp1"></i><tfoot id="rpbp1"></tfoot><font id="rpbp1"></font><tbody id="rpbp1"><big id="rpbp1"><listing id="rpbp1"><dfn id="rpbp1"></dfn></listing></big></tbody><sup id="rpbp1"></sup><th id="rpbp1"></th><object id="rpbp1"><tt id="rpbp1"><style id="rpbp1"><ins id="rpbp1"></ins></style></tt></object><acronym id="rpbp1"><u id="rpbp1"><strike id="rpbp1"></strike></u></acronym><ul id="rpbp1"><strike id="rpbp1"></strike></ul><strike id="rpbp1"><th id="rpbp1"><form id="rpbp1"></form></th></strike><form id="rpbp1"><progress id="rpbp1"><style id="rpbp1"><progress id="rpbp1"></progress></style></progress></form><acronym id="rpbp1"><u id="rpbp1"><center id="rpbp1"><optgroup id="rpbp1"></optgroup></center></u></acronym><small id="rpbp1"></small><pre id="rpbp1"></pre><dl id="rpbp1"></dl><meter id="rpbp1"><th id="rpbp1"></th></meter><dfn id="rpbp1"></dfn><meter id="rpbp1"></meter><var id="rpbp1"></var><mark id="rpbp1"><label id="rpbp1"></label></mark><p id="rpbp1"><mark id="rpbp1"><label id="rpbp1"></label></mark></p><dfn id="rpbp1"><span id="rpbp1"><optgroup id="rpbp1"></optgroup></span></dfn><pre id="rpbp1"><em id="rpbp1"><pre id="rpbp1"><form id="rpbp1"></form></pre></em></pre><noframes id="rpbp1"></noframes><fieldset id="rpbp1"></fieldset><dl id="rpbp1"><sup id="rpbp1"></sup></dl><div id="rpbp1"></div><optgroup id="rpbp1"></optgroup><nobr id="rpbp1"><acronym id="rpbp1"><nav id="rpbp1"><thead id="rpbp1"></thead></nav></acronym></nobr><abbr id="rpbp1"><div id="rpbp1"><rp id="rpbp1"></rp></div></abbr><ruby id="rpbp1"></ruby><menuitem id="rpbp1"></menuitem><thead id="rpbp1"><output id="rpbp1"></output></thead><ruby id="rpbp1"><dl id="rpbp1"><ruby id="rpbp1"><dl id="rpbp1"></dl></ruby></dl></ruby><thead id="rpbp1"></thead><meter id="rpbp1"></meter><menu id="rpbp1"><font id="rpbp1"></font></menu><thead id="rpbp1"></thead><td id="rpbp1"><kbd id="rpbp1"><div id="rpbp1"></div></kbd></td><dfn id="rpbp1"></dfn><abbr id="rpbp1"><form id="rpbp1"><strong id="rpbp1"><blockquote id="rpbp1"></blockquote></strong></form></abbr><legend id="rpbp1"></legend><acronym id="rpbp1"><u id="rpbp1"></u></acronym><address id="rpbp1"></address><strike id="rpbp1"></strike><strong id="rpbp1"><em id="rpbp1"></em></strong><var id="rpbp1"><font id="rpbp1"><object id="rpbp1"><tt id="rpbp1"></tt></object></font></var><samp id="rpbp1"><tbody id="rpbp1"><output id="rpbp1"></output></tbody></samp><u id="rpbp1"></u><font id="rpbp1"></font><p id="rpbp1"></p><video id="rpbp1"></video><acronym id="rpbp1"></acronym><tbody id="rpbp1"></tbody><small id="rpbp1"><ins id="rpbp1"><cite id="rpbp1"><sup id="rpbp1"></sup></cite></ins></small><thead id="rpbp1"></thead><listing id="rpbp1"><dfn id="rpbp1"><em id="rpbp1"><pre id="rpbp1"></pre></em></dfn></listing><wbr id="rpbp1"><ul id="rpbp1"></ul></wbr><font id="rpbp1"><style id="rpbp1"></style></font><dd id="rpbp1"></dd><legend id="rpbp1"></legend><listing id="rpbp1"></listing><blockquote id="rpbp1"></blockquote><output id="rpbp1"><var id="rpbp1"></var></output><thead id="rpbp1"></thead><acronym id="rpbp1"></acronym><tt id="rpbp1"><strike id="rpbp1"><tr id="rpbp1"><strike id="rpbp1"></strike></tr></strike></tt><listing id="rpbp1"><sub id="rpbp1"></sub></listing><u id="rpbp1"></u><strike id="rpbp1"><button id="rpbp1"></button></strike><sup id="rpbp1"><b id="rpbp1"><source id="rpbp1"><dfn id="rpbp1"></dfn></source></b></sup><tr id="rpbp1"><nobr id="rpbp1"><acronym id="rpbp1"><u id="rpbp1"></u></acronym></nobr></tr><pre id="rpbp1"><var id="rpbp1"><font id="rpbp1"><object id="rpbp1"></object></font></var></pre><ol id="rpbp1"></ol><u id="rpbp1"><wbr id="rpbp1"><label id="rpbp1"></label></wbr></u><button id="rpbp1"></button><address id="rpbp1"><u id="rpbp1"></u></address><kbd id="rpbp1"></kbd><font id="rpbp1"><style id="rpbp1"><delect id="rpbp1"><legend id="rpbp1"></legend></delect></style></font><em id="rpbp1"><sub id="rpbp1"></sub></em><small id="rpbp1"><legend id="rpbp1"><li id="rpbp1"><legend id="rpbp1"></legend></li></legend></small><dfn id="rpbp1"></dfn><b id="rpbp1"><i id="rpbp1"></i></b><acronym id="rpbp1"></acronym><small id="rpbp1"></small><ins id="rpbp1"></ins><pre id="rpbp1"></pre><fieldset id="rpbp1"></fieldset><dl id="rpbp1"></dl><legend id="rpbp1"></legend><form id="rpbp1"><progress id="rpbp1"><track id="rpbp1"><tfoot id="rpbp1"></tfoot></track></progress></form><strike id="rpbp1"></strike><nobr id="rpbp1"><address id="rpbp1"></address></nobr><sub id="rpbp1"><style id="rpbp1"><delect id="rpbp1"><style id="rpbp1"></style></delect></style></sub><li id="rpbp1"><legend id="rpbp1"><th id="rpbp1"></th></legend></li><span id="rpbp1"><optgroup id="rpbp1"><xmp id="rpbp1"><label id="rpbp1"></label></xmp></optgroup></span><strong id="rpbp1"><em id="rpbp1"></em></strong><progress id="rpbp1"><small id="rpbp1"></small></progress><dd id="rpbp1"><strong id="rpbp1"></strong></dd><rt id="rpbp1"><small id="rpbp1"></small></rt><thead id="rpbp1"></thead><dl id="rpbp1"></dl><optgroup id="rpbp1"></optgroup><label id="rpbp1"></label><strike id="rpbp1"></strike><em id="rpbp1"><pre id="rpbp1"></pre></em><code id="rpbp1"></code><track id="rpbp1"></track><tfoot id="rpbp1"><nobr id="rpbp1"><address id="rpbp1"><strong id="rpbp1"></strong></address></nobr></tfoot><strong id="rpbp1"><blockquote id="rpbp1"></blockquote></strong><ul id="rpbp1"><strike id="rpbp1"></strike></ul><abbr id="rpbp1"><form id="rpbp1"><strong id="rpbp1"><blockquote id="rpbp1"></blockquote></strong></form></abbr><div id="rpbp1"><rp id="rpbp1"></rp></div><pre id="rpbp1"></pre><label id="rpbp1"></label><abbr id="rpbp1"><div id="rpbp1"></div></abbr><p id="rpbp1"></p><var id="rpbp1"></var><tt id="rpbp1"><legend id="rpbp1"><ul id="rpbp1"><strike id="rpbp1"></strike></ul></legend></tt><pre id="rpbp1"></pre><thead id="rpbp1"><i id="rpbp1"></i></thead><samp id="rpbp1"></samp><tt id="rpbp1"><strike id="rpbp1"></strike></tt><label id="rpbp1"></label><sup id="rpbp1"><strong id="rpbp1"></strong></sup><video id="rpbp1"></video><div id="rpbp1"><nobr id="rpbp1"><acronym id="rpbp1"><noframes id="rpbp1"></noframes></acronym></nobr></div><sup id="rpbp1"><strong id="rpbp1"><em id="rpbp1"><label id="rpbp1"></label></em></strong></sup></div>
      
      </html>