\n

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

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

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

\n\n\n  <?php echo $this->escape($this->title); ?><\/title>\n<\/head>\n<body>
<h1><a href="http://www.miracleart.cn/">国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂</a></h1>\n  <?php echo $this->escape($this->body); ?>\n<\/body>\n<\/html>\n\n<\/pre>\n\n<p>現(xiàn)在已經(jīng)添加了兩個功能。$this->escape()類方法用于所有的輸出。即使你自己創(chuàng)建輸出,就像這個例子一樣。避開所有輸出也是一個很好的習(xí)慣,它可以在默認(rèn)情況下幫助你防止跨站腳本攻擊(XSS)。<\/p>\n<p>$this->title和$this->body屬性用來展示動態(tài)數(shù)據(jù)。這些也可以在controller中定義,所以我們修改IndexController.php以指定它們:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nZend::loadClass('Zend_Controller_Action');\nZend::loadClass('Zend_View');\nclass IndexController extends Zend_Controller_Action \n{\n  public function indexAction()\n  {\n    $view = new Zend_View();\n    $view->setScriptPath('\/path\/to\/views');\n    $view->title = 'Dynamic Title';\n    $view->body = 'This is a dynamic body.';\n    echo $view->render('example.php');\n  }\n  public function noRouteAction()\n  {\n    $this->_redirect('\/');\n  }\n}\n?>\n\n<\/pre>\n\n<p>現(xiàn)在你再次訪問根目錄,應(yīng)該就可以看到模板所使用的這些值了。因?yàn)槟阍谀0逯惺褂玫?this就是在Zend_View范圍內(nèi)所執(zhí)行的實(shí)例。<\/p>\n<p>要記住example.php只是一個普通的PHP腳本,所以你完全可以做你想做的。只是應(yīng)努力只在要求顯示數(shù)據(jù)時才使用模板。你的controller (controller分發(fā)的模塊)應(yīng)處理你全部的業(yè)務(wù)邏輯。<\/p>\n<p>在繼續(xù)之前,我想做最后一個關(guān)于Zend_View的提示。在controller的每個類方法內(nèi)初始化$view對象需要額外輸入一些內(nèi)容,而我們的主要目標(biāo)是讓快速開發(fā)網(wǎng)絡(luò)應(yīng)用更簡單。如果所有模板都放在一個目錄下,是否要在每個例子中都調(diào)用setScriptPath()也存在爭議。<\/p>\n<p>幸運(yùn)的是,Zend類包含了一個寄存器來幫助減少工作量。你可以用register()方法把你的$view對象存儲在寄存器:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nZend::register('view', $view);\n?>\n\n<\/pre>\n\n<p>用registry()方法進(jìn)行檢索:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\n$view = Zend::registry('view');\n?>\n\n<\/pre>\n\n<p>基于這點(diǎn),本教程使用寄存器。 <\/p>\n<p><strong>Zend_InputFilter<\/strong><\/p>\n<p>本教程討論的最后一個組件是Zend_InputFilter。這個類提供了一種簡單而有效的輸入過濾方法。你可以通過提供一組待過濾數(shù)據(jù)來進(jìn)行初始化。<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\n$filterPost = new Zend_InputFilter($_POST);\n?>\n\n<\/pre>\n\n<p>這會將($_POST)設(shè)置為NULL,所以就不能直接進(jìn)入了。Zend_InputFilter提供了一個簡單、集中的根據(jù)特定規(guī)則過濾數(shù)據(jù)的類方法集。例如,你可以用getAlpha()來獲取$_POST['name']中的字母:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\n\/* $_POST['name'] = 'John123Doe'; *\/\n$filterPost = new Zend_InputFilter($_POST);\n\/* $_POST = NULL; *\/\n$alphaName = $filterPost->getAlpha('name');\n\/* $alphaName = 'JohnDoe'; *\/\n?>\n\n<\/pre>\n\n<p>每一個類方法的參數(shù)都是對應(yīng)要過濾的元素的關(guān)鍵詞。對象(例子中的$filterPost)可以保護(hù)數(shù)據(jù)不被篡改,并能更好地控制對數(shù)據(jù)的操作及一致性。因此,當(dāng)你操縱輸入數(shù)據(jù),應(yīng)始終使用Zend_InputFilter。<\/p>\n<p>提示:Zend_Filter提供與Zend_InputFilter方法一樣的靜態(tài)方法。<\/p>\n<p><strong>構(gòu)建新聞管理系統(tǒng)<\/strong><\/p>\n<p>雖然預(yù)覽版提供了許多組件(甚至許多已經(jīng)被開發(fā)),我們已經(jīng)討論了構(gòu)建一個簡單程序所需要的全部組件。在這里,你會對ZF的基本結(jié)構(gòu)和設(shè)計有更清楚的理解。<\/p>\n<p>每個人開發(fā)的程序都會有所不同,而Zend Framework試圖包容這些差異。同樣,這個教程是根據(jù)我的喜好寫的,請根據(jù)自己的偏好自行調(diào)整。<\/p>\n<p>當(dāng)我開發(fā)程序時,我會先做界面。這并不意味著我把時間都花在標(biāo)簽、樣式表和圖片上,而是我從一個用戶的角度去考慮問題。因此我把程序看成是頁面的集合,每一頁都是一個獨(dú)立的網(wǎng)址。這個新聞系統(tǒng)就是由以下網(wǎng)址組成的:<\/p>\n<p><span style=\"color: #0000ff\">\/<br \/>\n\/add\/news<br \/>\n\/add\/comment<br \/>\n\/admin<br \/>\n\/admin\/approve<br \/>\n\/view\/{id}<\/span><\/p>\n<p>你可以直接把這些網(wǎng)址和controller聯(lián)系起來。IndexController列出新聞,AddController添加新聞和評論,AdminController處理一些如批準(zhǔn)新聞之類的管理,ViewController特定新聞和對應(yīng)評論的顯示。<\/p>\n<p>如果你的FooController.php還在,把它刪除。修改IndexController.php,為業(yè)務(wù)邏輯以添加相應(yīng)的action和一些注釋:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nZend::loadClass('Zend_Controller_Action');\nclass IndexController extends Zend_Controller_Action \n{\n  public function indexAction()\n  {\n    \/* List the news. *\/\n  }\n  public function noRouteAction()\n  {\n    $this->_redirect('\/');\n  }\n}\n?>\n\n<\/pre>\n\n<p>接下來,創(chuàng)建AddController.php文件:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nZend::loadClass('Zend_Controller_Action');\nclass AddController extends Zend_Controller_Action\n{\n  function indexAction()\n  {\n    $this->_redirect('\/');\n  }\n  function commentAction()\n  {\n    \/* Add a comment. *\/\n  }\n  function newsAction()\n  {\n    \/* Add news. *\/\n  }\n  function __call($action, $arguments)\n  {\n    $this->_redirect('\/');\n  }\n}\n?>\n\n<\/pre>\n\n<p>記住AddController的indexAction()方法不能調(diào)用。當(dāng)訪問\/add時會執(zhí)行這個類方法。因?yàn)橛脩艨梢允止ぴL問這個網(wǎng)址,這是有可能的,所以你要把用戶重定向到主頁、顯示錯誤或你認(rèn)為合適的行為。<\/p>\n<p>接下來,創(chuàng)建AdminController.php文件:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nZend::loadClass('Zend_Controller_Action');\nclass AdminController extends Zend_Controller_Action\n{\n  function indexAction()\n  {\n    \/* Display admin interface. *\/\n  }\n  function approveAction()\n  {\n    \/* Approve news. *\/\n  }\n  function __call($action, $arguments)\n  {\n    $this->_redirect('\/');\n  }\n}\n?>\n\n<\/pre>\n\n<p>最后,創(chuàng)建ViewController.php文件:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nZend::loadClass('Zend_Controller_Action');\nclass ViewController extends Zend_Controller_Action\n{\n  function indexAction()\n  {\n    $this->_redirect('\/');\n  }\n  function __call($id, $arguments)\n  {\n    \/* Display news and comments for $id. *\/\n  }\n}\n?>\n\n<\/pre>\n\n<p>和AddController一樣,index()方法不能調(diào)用,所以你可以使用你認(rèn)為合適的action。ViewController和其它的有點(diǎn)不同,因?yàn)槟悴恢朗裁床攀怯行У腶ction。為了支持像\/view\/23這樣的網(wǎng)址,你要使用__call()來支持動態(tài)action。<\/p>\n<p><strong>數(shù)據(jù)庫操作<\/strong><\/p>\n<p>因?yàn)閆end Framework的數(shù)據(jù)庫組件還不穩(wěn)定,而我希望這個演示可以做得簡單一點(diǎn)。我使用了一個簡單的類,用SQLite進(jìn)行新聞條目和評論的存儲和查詢。<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nclass Database\n{\n  private $_db;\n  public function __construct($filename)\n  {\n    $this->_db = new SQLiteDatabase($filename);\n  }\n  public function addComment($name, $comment, $newsId)\n  {\n    $name = sqlite_escape_string($name);\n    $comment = sqlite_escape_string($comment);\n    $newsId = sqlite_escape_string($newsId);\n    $sql = \"INSERT\n        INTO  comments (name, comment, newsId)\n        VALUES ('$name', '$comment', '$newsId')\";\n    return $this->_db->query($sql);\n  }\n  public function addNews($title, $content)\n  {\n    $title = sqlite_escape_string($title);\n    $content = sqlite_escape_string($content);\n    $sql = \"INSERT\n        INTO  news (title, content)\n        VALUES ('$title', '$content')\";\n    return $this->_db->query($sql);\n  }\n  public function approveNews($ids)\n  {\n    foreach ($ids as $id) {\n      $id = sqlite_escape_string($id);\n      $sql = \"UPDATE news\n          SET  approval = 'T'\n          WHERE id = '$id'\";\n      if (!$this->_db->query($sql)) {\n        return FALSE;\n      }\n    }\n    return TRUE;\n  }\n  public function getComments($newsId)\n  {\n    $newsId = sqlite_escape_string($newsId);\n    $sql = \"SELECT name, comment\n        FROM  comments\n        WHERE newsId = '$newsId'\";\n    if ($result = $this->_db->query($sql)) {\n      return $result->fetchAll();\n    }\n    return FALSE;\n  }\n  public function getNews($id = 'ALL')\n  {\n    $id = sqlite_escape_string($id);\n    switch ($id) {\n      case 'ALL':\n        $sql = \"SELECT id,\n                title\n            FROM  news\n            WHERE approval = 'T'\";\n        break;\n      case 'NEW':\n        $sql = \"SELECT *\n            FROM  news\n            WHERE approval != 'T'\";\n        break;\n      default:\n        $sql = \"SELECT *\n            FROM  news\n            WHERE id = '$id'\";\n        break;\n    }\n    if ($result = $this->_db->query($sql)) {\n      if ($result->numRows() != 1) {\n        return $result->fetchAll();\n      } else {\n        return $result->fetch();\n      }\n    }\n    return FALSE;\n  }\n}\n?>\n\n<\/pre>\n\n<p>(你可以用自己的解決方案隨意替換這個類。這里只是為你提供一個完整示例的介紹,并非建議要這么實(shí)現(xiàn)。)<\/p>\n<p>這個類的構(gòu)造器需要SQLite數(shù)據(jù)庫的完整路徑和文件名,你必須自己進(jìn)行創(chuàng)建。<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\n$db = new SQLiteDatabase('\/path\/to\/db.sqlite');\n$db->query(\"CREATE TABLE news (\n    id    INTEGER PRIMARY KEY,\n    title  VARCHAR(255),\n    content TEXT,\n    approval CHAR(1) DEFAULT 'F'\n  )\");\n$db->query(\"CREATE TABLE comments (\n    id    INTEGER PRIMARY KEY,\n    name   VARCHAR(255),\n    comment TEXT,\n    newsId  INTEGER\n  )\");\n?>\n\n<\/pre>\n\n<p>你只需要做一次,以后直接給出Database類構(gòu)造器的完整路徑和文件名即可:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\n$db = new Database('\/path\/to\/db.sqlite');\n?>\n\n<\/pre>\n\n<p><strong>整合<\/strong><\/p>\n<p>為了進(jìn)行整合,在lib目錄下創(chuàng)建Database.php,loadClass()就可以找到它。你的index.php文件現(xiàn)在就會初始化$view和$db并存儲到寄存器。你也可以創(chuàng)建__autoload()函數(shù)自動加載你所需要的類:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\ninclude 'Zend.php';\nfunction __autoload($class)\n{\n  Zend::loadClass($class);\n}\n$db = new Database('\/path\/to\/db.sqlite');\nZend::register('db', $db);\n$view = new Zend_View;\n$view->setScriptPath('\/path\/to\/views');\nZend::register('view', $view);\n$controller = Zend_Controller_Front::getInstance()\n       ->setControllerDirectory('\/path\/to\/controllers')\n       ->dispatch();\n?>\n\n<\/pre>\n\n<p>接下來,在views目錄創(chuàng)建一些簡單的模板。index.php可以用來顯示index視圖:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<html>\n<head>\n <title>News<\/title>\n<\/head>\n<body>\n <h1>News<\/h1>\n <?php foreach ($this->news as $entry) { ?>\n <p>\n  <a href=\"\/view\/<?php echo $this->escape($entry['id']); ?>\">\n  <?php echo $this->escape($entry['title']); ?>\n  <\/a>\n <\/p>\n <?php } ?>\n <h1>Add News<\/h1>\n <form action=\"\/add\/news\" method=\"POST\">\n <p>Title:<br \/><input type=\"text\" name=\"title\" \/><\/p>\n <p>Content:<br \/><textarea name=\"content\"><\/textarea><\/p>\n <p><input type=\"submit\" value=\"Add News\" \/><\/p>\n <\/form>\n<\/body>\n<\/html>\n\n<\/pre>\n\n<p>view.php模板可以用來顯示選定的新聞條目:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<html>\n<head>\n <title>\n  <?php echo $this->escape($this->news['title']); ?>\n <\/title>\n<\/head>\n<body>\n <h1>\n  <?php echo $this->escape($this->news['title']); ?>\n <\/h1>\n <p>\n  <?php echo $this->escape($this->news['content']); ?>\n <\/p>\n <h1>Comments<\/h1>\n <?php foreach ($this->comments as $comment) { ?>\n <p>\n  <?php echo $this->escape($comment['name']); ?> writes:\n <\/p>\n <blockquote>\n  <?php echo $this->escape($comment['comment']); ?>\n <\/blockquote>\n <?php } ?>\n <h1>Add a Comment<\/h1>\n <form action=\"\/add\/comment\" method=\"POST\">\n <input type=\"hidden\" name=\"newsId\" \n  value=\"<?php echo $this->escape($this->id); ?>\" \/>\n <p>Name:<br \/><input type=\"text\" name=\"name\" \/><\/p>\n <p>Comment:<br \/><textarea name=\"comment\"><\/textarea><\/p>\n <p><input type=\"submit\" value=\"Add Comment\" \/><\/p>\n <\/form>\n<\/body>\n<\/html>\n\n<\/pre>\n\n<p>最后,admin.php模板可以用來批準(zhǔn)新聞條目:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<html>\n<head>\n <title>News Admin<\/title>\n<\/head>\n<body>\n <form action=\"\/admin\/approve\" method=\"POST\">\n <?php foreach ($this->news as $entry) { ?>\n <p>\n  <input type=\"checkbox\" name=\"ids[]\"\n  value=\"<?php echo $this->escape($entry['id']); ?>\" \/>\n  <?php echo $this->escape($entry['title']); ?>\n  <?php echo $this->escape($entry['content']); ?>\n <\/p>\n <?php } ?>\n <p>\n  Password:<br \/><input type=\"password\" name=\"password\" \/>\n <\/p>\n <p><input type=\"submit\" value=\"Approve\" \/><\/p>\n <\/form>\n<\/body>\n<\/html>\n\n<\/pre>\n\n<p>提示:為了保持簡單,這個表單用密碼作為驗(yàn)證機(jī)制。<\/p>\n<p>使用到模板的地方,你只需要把注釋替換成幾行代碼。如IndexController.php就變成下面這樣:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nclass IndexController extends Zend_Controller_Action \n{\n  public function indexAction()\n  {\n    \/* List the news. *\/\n    $db = Zend::registry('db');\n    $view = Zend::registry('view');\n    $view->news = $db->getNews();\n    echo $view->render('index.php');\n  }\n  public function noRouteAction()\n  {\n    $this->_redirect('\/');\n  }\n}\n?>\n\n<\/pre>\n\n<p>因?yàn)闂l理比較清楚,這個程序首頁的整個業(yè)務(wù)邏輯只有四行代碼。AddController.php更復(fù)雜一點(diǎn),它需要更多的代碼:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nclass AddController extends Zend_Controller_Action\n{\n  function indexAction()\n  {\n    $this->_redirect('\/');\n  }\n  function commentAction()\n  {\n    \/* Add a comment. *\/\n    $filterPost = new Zend_InputFilter($_POST);\n    $db = Zend::registry('db');\n    $name = $filterPost->getAlpha('name');\n    $comment = $filterPost->noTags('comment');\n    $newsId = $filterPost->getDigits('newsId');\n    $db->addComment($name, $comment, $newsId);\n    $this->_redirect(\"\/view\/$newsId\");\n  }\n  function newsAction()\n  {\n    \/* Add news. *\/\n    $filterPost = new Zend_InputFilter($_POST);\n    $db = Zend::registry('db');\n    $title = $filterPost->noTags('title');\n    $content = $filterPost->noTags('content');\n    $db->addNews($title, $content);\n    $this->_redirect('\/');\n  }\n  function __call($action, $arguments)\n  {\n    $this->_redirect('\/');\n  }\n}\n?>\n\n<\/pre>\n\n<p>因?yàn)橛脩粼谔峤槐韱魏蟊恢囟ㄏ颍@個controller不需要視圖。<\/p>\n<p>在AdminController.php,你要處理顯示管理界面和批準(zhǔn)新聞兩個action:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nclass AdminController extends Zend_Controller_Action\n{\n  function indexAction()\n  {\n    \/* Display admin interface. *\/\n    $db = Zend::registry('db');\n    $view = Zend::registry('view');\n    $view->news = $db->getNews('NEW');\n    echo $view->render('admin.php');\n  }\n  function approveAction()\n  {\n    \/* Approve news. *\/\n    $filterPost = new Zend_InputFilter($_POST);\n    $db = Zend::registry('db');\n    if ($filterPost->getRaw('password') == 'mypass') {\n      $db->approveNews($filterPost->getRaw('ids'));\n      $this->_redirect('\/');\n    } else {\n      echo 'The password is incorrect.';\n    }\n  }\n  function __call($action, $arguments)\n  {\n    $this->_redirect('\/');\n  }\n}\n?>\n\n<\/pre>\n\n<p>最后是ViewController.php:<\/p>\n\n<pre class='brush:php;toolbar:false;'>\n<?php\nclass ViewController extends Zend_Controller_Action\n{\n  function indexAction()\n  {\n    $this->_redirect('\/');\n  }\n  function __call($id, $arguments)\n  {\n    \/* Display news and comments for $id. *\/\n    $id = Zend_Filter::getDigits($id);\n    $db = Zend::registry('db');\n    $view = Zend::registry('view');\n    $view->news = $db->getNews($id);\n    $view->comments = $db->getComments($id);\n    $view->id = $id;\n    echo $view->render('view.php');\n  }\n}\n?>\n\n<\/pre>\n\n<p>雖然很簡單,但我們還是提供了一個功能較全的新聞和評論程序。最好的地方是由于有較好的設(shè)計,增加功能變得很簡單。而且隨著Zend Framework越來越成熟,只會變得更好。<\/p>\n<p><strong>更多信息<\/strong><\/p>\n<p>這個教程只是討論了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><strong>結(jié)束語<\/strong><\/p>\n<p>要對預(yù)覽版進(jìn)行評價是很容易的事,我在寫這個教程時也遇到很多困難??偟膩碚f,我想Zend Framework顯示了承諾,加入的每個人都是想繼續(xù)完善它。<\/p>\n<p>更多關(guān)于zend相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《Yii框架入門及常用技巧總結(jié)》、《ThinkPHP入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》<\/p>\n<p>希望本文所述對大家基于Zend Framework框架的PHP程序設(shè)計有所幫助。<\/p>\n\n\n<!--endmain-->\n\n<h4>您可能感興趣的文章:<\/h4>\n<ul>\n<li>Zend Framework框架教程之Zend_Db_Table_Rowset用法實(shí)例分析<\/li>\n<li>Zend Framework教程之Zend_Db_Table_Row用法實(shí)例分析<\/li>\n<li>Zend Framework教程之Zend_Db_Table用法詳解<\/li>\n<li>Zend Framework教程之Zend_Form組件實(shí)現(xiàn)表單提交并顯示錯誤提示的方法<\/li>\n<li>Zend Framework框架Smarty擴(kuò)展實(shí)現(xiàn)方法<\/li>\n<li>Zend Framework框架路由機(jī)制代碼分析<\/li>\n<li>Zend Framework實(shí)現(xiàn)具有基本功能的留言本(附demo源碼下載)<\/li>\n<li>Zend Framework實(shí)現(xiàn)將session存儲在memcache中的方法<\/li>\n<li>Zend Framework分頁類用法詳解<\/li>\n<li>Zend Framework實(shí)現(xiàn)多文件上傳功能實(shí)例<\/li>\n<li>Zend Framework入門之環(huán)境配置及第一個Hello World示例(附demo源碼下載)<\/li>\n<li>Zend Framework教程之連接數(shù)據(jù)庫并執(zhí)行增刪查的方法(附demo源碼下載)<\/li>\n<li>Zend Framework教程之Zend_Db_Table表關(guān)聯(lián)實(shí)例詳解<\/li>\n<\/ul>\n<p align=\"left\"><\/p>\n<div style=\"display:none;\">\n<span id=\"url\" itemprop=\"url\">http:\/\/www.bkjia.com\/PHPjc\/1113710.html<\/span><span id=\"indexUrl\" itemprop=\"indexUrl\">www.bkjia.com<\/span><span id=\"isOriginal\" itemprop=\"isOriginal\">true<\/span><span id=\"isBasedOnUrl\" itemprop=\"isBasedOnUrl\">http:\/\/www.bkjia.com\/PHPjc\/1113710.html<\/span><span id=\"genre\" itemprop=\"genre\">TechArticle<\/span><span id=\"description\" itemprop=\"description\">Zend Framework開發(fā)入門經(jīng)典教程,zendframework 本文講述了Zend Framework開發(fā)入門相關(guān)知識點(diǎn)。分享給大家供大家參考,具體如下: Zend Framework發(fā)布...<\/span>\n<\/div>\n<div   id="377j5v51b"   class=\"art_confoot\"><\/div>\n"}	</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/fr/" 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="communauté" class="head_nava head_nava-template1">communauté</a>
                    <div   class="377j5v51b"   id="dropdown-template1" style="display: none;">
                        <div   id="377j5v51b"   class="languagechoose">
                            <a href="http://www.miracleart.cn/fr/article.html" title="Articles" class="languagechoosea on">Articles</a>
                            <a href="http://www.miracleart.cn/fr/faq/zt" title="Sujets" class="languagechoosea">Sujets</a>
                            <a href="http://www.miracleart.cn/fr/wenda.html" title="Questions et réponses" class="languagechoosea">Questions et réponses</a>
                        </div>
                    </div>
                </div>

                <div   id="377j5v51b"   class="head_navs">
                    <a href="javascript:;" title="Apprendre" class="head_nava head_nava-template1_1">Apprendre</a>
                    <div   class="377j5v51b"   id="dropdown-template1_1" style="display: none;">
                        <div   id="377j5v51b"   class="languagechoose">
                            <a href="http://www.miracleart.cn/fr/course.html" title="Cours" class="languagechoosea on">Cours</a>
                            <a href="http://www.miracleart.cn/fr/dic/" title="Dictionnaire de programmation" class="languagechoosea">Dictionnaire de programmation</a>
                        </div>
                    </div>
                </div>

                <div   id="377j5v51b"   class="head_navs">
                    <a href="javascript:;" title="Bibliothèque d'outils" class="head_nava head_nava-template1_2">Bibliothèque d'outils</a>
                    <div   class="377j5v51b"   id="dropdown-template1_2" style="display: none;">
                        <div   id="377j5v51b"   class="languagechoose">
                            <a href="http://www.miracleart.cn/fr/toolset/development-tools" title="Outils de développement" class="languagechoosea on">Outils de développement</a>
                            <a href="http://www.miracleart.cn/fr/toolset/website-source-code" title="Code source du site Web" class="languagechoosea">Code source du site Web</a>
                            <a href="http://www.miracleart.cn/fr/toolset/php-libraries" title="Bibliothèques PHP" class="languagechoosea">Bibliothèques PHP</a>
                            <a href="http://www.miracleart.cn/fr/toolset/js-special-effects" title="Effets spéciaux JS" class="languagechoosea on">Effets spéciaux JS</a>
                            <a href="http://www.miracleart.cn/fr/toolset/website-materials" title="Matériel du site Web" class="languagechoosea on">Matériel du site Web</a>
                            <a href="http://www.miracleart.cn/fr/toolset/extension-plug-ins" title="Plugins d'extension" class="languagechoosea on">Plugins d'extension</a>
                        </div>
                    </div>
                </div>

                <div   id="377j5v51b"   class="head_navs">
                    <a href="http://www.miracleart.cn/fr/ai" title="Outils d'IA" class="head_nava head_nava-template1_3">Outils d'IA</a>
                </div>

                <div   id="377j5v51b"   class="head_navs">
                    <a href="javascript:;" title="Loisirs" class="head_nava head_nava-template1_3">Loisirs</a>
                    <div   class="377j5v51b"   id="dropdown-template1_3" style="display: none;">
                        <div   id="377j5v51b"   class="languagechoose">
                            <a href="http://www.miracleart.cn/fr/game" title="Téléchargement du jeu" class="languagechoosea on">Téléchargement du jeu</a>
                            <a href="http://www.miracleart.cn/fr/mobile-game-tutorial/" title="Tutoriels de jeu" class="languagechoosea">Tutoriels de jeu</a>

                        </div>
                    </div>
                </div>
            </div>
        </div>
                    <div   id="377j5v51b"   class="head_search">
                <input id="key_words"  onkeydown="if (event.keyCode == 13) searchs('fr')" class="search-input" type="text" autocomplete="off" name="keywords" required="required" placeholder="Block,address,transaction,news" value="">
                <a href="javascript:;" title="recherche"  onclick="searchs('fr')"><img src="/static/imghw/find.png" alt="recherche"></a>
            </div>
                <div   id="377j5v51b"   class="head_right">
            <div   id="377j5v51b"   class="haed_language">
                <a href="javascript:;" class="layui-btn haed_language_btn">Fran?ais<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:;" title="Fran?ais" class="languagechoosea">Fran?ais</a>
                                                <a href="javascript:setlang('de');" 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_main1L">
					<div   id="377j5v51b"   class="Article_Details_main1Lmain" id="Article_Details_main1Lmain">
						<div   id="377j5v51b"   class="Article_Details_main1L1">Table des matières</div>
						<div   id="377j5v51b"   class="Article_Details_main1L2" id="Article_Details_main1L2">
							<!-- 左側(cè)懸浮,文章定位標(biāo)題1 id="Article_Details_main1L2s_1"-->
															<div   id="377j5v51b"   class="Article_Details_main1L2s ">
									<a href="#Zend-Framework開發(fā)入門經(jīng)典教程-zendframework" title="Zend Framework開發(fā)入門經(jīng)典教程,zendframework" >Zend Framework開發(fā)入門經(jīng)典教程,zendframework</a>
								</div>
																<div   id="377j5v51b"   class="Article_Details_main1L2s ">
									<a href="#您可能感興趣的文章" title="您可能感興趣的文章:" >您可能感興趣的文章:</a>
								</div>
														</div>
					</div>
				</div>
							<div   id="377j5v51b"   class="Article_Details_main1M">
					<div   id="377j5v51b"   class="phpgenera_Details_mainL1">
						<a href="http://www.miracleart.cn/fr/" title="Maison"
							class="phpgenera_Details_mainL1a">Maison</a>
						<img src="/static/imghw/top_right.png" alt="" />
												<a href="http://www.miracleart.cn/fr/be/"
							class="phpgenera_Details_mainL1a">développement back-end</a>
						<img src="/static/imghw/top_right.png" alt="" />
												<a href="http://www.miracleart.cn/fr/php-weizijiaocheng.html"
							class="phpgenera_Details_mainL1a">tutoriel php</a>
						<img src="/static/imghw/top_right.png" alt="" />
						<span>Zend Framework開發(fā)入門經(jīng)典教程,zendframework_PHP教程</span>
					</div>
					
					<div   id="377j5v51b"   class="Articlelist_txts">
						<div   id="377j5v51b"   class="Articlelist_txts_info">
							<h1 class="Articlelist_txts_title">Zend Framework開發(fā)入門經(jīng)典教程,zendframework_PHP教程</h1>
							<div   id="377j5v51b"   class="Articlelist_txts_info_head">
								<div   id="377j5v51b"   class="author_info">
									<a href="http://www.miracleart.cn/fr/member/887227.html"  class="author_avatar">
									<img class="lazy"  data-src="https://img.php.cn/upload/avatar/000/887/227/63bb7851c9547215.jpg" src="/static/imghw/default1.png" alt="WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB">
									</a>
									<div   id="377j5v51b"   class="author_detail">
																			<a href="http://www.miracleart.cn/fr/member/887227.html" class="author_name">WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB</a>
                                										</div>
								</div>
                			</div>
							<span id="377j5v51b"    class="Articlelist_txts_time">Jul 12, 2016 am	 08:56 AM</span>
															<div   id="377j5v51b"   class="Articlelist_txts_infos">
																			<span id="377j5v51b"    class="Articlelist_txts_infoss on">framework</span>
																			<span id="377j5v51b"    class="Articlelist_txts_infoss ">zend</span>
																			<span id="377j5v51b"    class="Articlelist_txts_infoss ">commencer</span>
																	</div>
														
						</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></p>
<h2 id="Zend-Framework開發(fā)入門經(jīng)典教程-zendframework">Zend Framework開發(fā)入門經(jīng)典教程,zendframework</h2>
<p>本文講述了Zend Framework開發(fā)入門相關(guān)知識點(diǎn)。分享給大家供大家參考,具體如下:</p>
<p>Zend Framework發(fā)布了!雖然仍處于開發(fā)初期,這個教程仍突出講解目前幾個最好的功能,并指導(dǎo)你完成一個簡單程序的構(gòu)建。</p>
<p>Zend最早在社區(qū)里發(fā)布了ZF?;谕瑯拥南敕?,這個教程寫來用于展示ZF現(xiàn)有的功能。由于這個教程是在線發(fā)布,我將在ZF變化時對其進(jìn)行更新,以便盡可能有效。</p>
<p><strong>要求</strong></p>
<p>Zend Framework要求PHP5。為了更好利用本教程的代碼,你還需要Apache網(wǎng)頁服務(wù)器。因?yàn)槭痉冻绦颍ㄒ粋€新聞管理系統(tǒng))用到了mod_rewrite。</p>
<p>這個教程的代碼可以自由下載,所以你可以自己試一下。你可以從Brain Buld的網(wǎng)站下載到代碼:http://brainbulb.com/zend-framework-tutorial.tar.gz。</p>
<p><strong>下載ZF</strong></p>
<p>當(dāng)你開始這篇教程時,你需要下載ZF的最新版本。你可以用瀏覽器手工從http://framework.zend.com/download選擇tar.gz或zip文件進(jìn)行下載,或者使用下列命令:</p>

<pre class='brush:php;toolbar:false;'>
$ wget http://framework.zend.com/download/tgz
$ tar -xvzf ZendFramework-0.1.2.tar.gz

</pre>

<p>提示:Zend計劃提供自有PEAR通道簡化下載。</p>
<p>一旦你下載了預(yù)覽版,把library目錄放到方便的地方。在這個教程,我把library重命名為lib以便有個簡潔的目錄結(jié)構(gòu):</p>
<p><span style="color: #0000ff">app/<br />
    views/<br />
    controllers/<br />
www/<br />
    .htaccess<br />
    index.php<br />
lib/</span></p>
<p>www目錄是文檔根目錄,controllers和views目錄是以后會用到的空目錄,而lib目錄來自你下載的預(yù)覽版。</p>
<p><strong>開始</strong></p>
<p>我要介紹的第一個組件是Zend_Controller。從很多方面看,它為你開發(fā)的程序提供了基礎(chǔ),同時也部分決定了Zend Framework不只是個組件的集合。但是,你在用之前需要將所有的得到的請求都放到一個簡單的PHP腳本。本教程用的是mod_rewrite。</p>
<p>用mod_rewrite自身是一種藝術(shù),但幸運(yùn)的是,這個特殊的任務(wù)特別簡單。如果你對mod_rewrite或Apache的一般配置不熟悉,在文檔根目錄下創(chuàng)建一個.htaccess文件,并添加以下內(nèi)容:</p>

<pre class='brush:php;toolbar:false;'>
RewriteEngine on
RewriteRule !/.(js|ico|gif|jpg|png|css)$ index.php

</pre>

<p><span style="color: #0000ff">提示: Zend_Controller的一個TODO項目就是取消對mod_rewrite的依賴。為了提供一個預(yù)覽版的范例,本教程用了mod_rewrite。</span></p>
<p>如果你直接把這些內(nèi)容添加到httpd.conf,你必須重啟網(wǎng)頁服務(wù)器。但如果你用.htaccess文件,則什么都不必做。你可以放一些具體的文本到index.php并訪問任意路徑如/foo/bar做一下快速測試。如你的域名為example.org,則訪問http://example.org/foo/bar。</p>
<p>你還要設(shè)置ZF庫的路徑到include_path。你可以在php.ini設(shè)置,也可以直接在你的.htaccess文件放下列內(nèi)容:</p>

<pre class='brush:php;toolbar:false;'>
php_value include_path "/path/to/lib"

</pre>

<p><strong>Zend</strong></p>
<p>Zend類包含了一些經(jīng)常使用的靜態(tài)方法的集合。下面是唯一一個你要手工添加的類:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
include 'Zend.php';
&#63;>

</pre>

<p>一旦你包含了Zend.php,你就已經(jīng)包含了Zend類的所有的類方法。用loadClass()就可以簡單地加載其它類。例如,加載Zend_Controller_Front類:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
include 'Zend.php';
Zend::loadClass('Zend_Controller_Front');
&#63;>

</pre>

<p>include_path能理解loadclass()及ZF的組織和目錄結(jié)構(gòu)。我用它加載所有其它類。  </p>
<p><strong>Zend_Controller</strong></p>
<p>使用這個controller非常直觀。事實(shí)上,我寫本教程時并沒有用到它豐富的文檔。</p>
<p>提示:文檔目前已經(jīng)可以在http://framework.zend.com/manual/zend.controller.html看到。</p>
<p>我一開始是用一個叫Zend_Controller_Front的front controller。為了理解它是怎么工作的,請把下列代碼放在你的index.php文件:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
include 'Zend.php';
Zend::loadClass('Zend_Controller_Front');
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('/path/to/controllers');
$controller->dispatch();
&#63;>

</pre>

<p>如果你更喜歡對象鏈結(jié),可以用以下代碼代替:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
include 'Zend.php';
Zend::loadClass('Zend_Controller_Front');
$controller = Zend_Controller_Front::getInstance()
       ->setControllerDirectory('/path/to/controllers')
       ->dispatch();
&#63;>

</pre>

<p>現(xiàn)在如果你訪問/foo/bar,會有錯誤發(fā)生。沒錯!它讓你知道發(fā)生了什么事。主要的問題是找不到IndexController.php文件。</p>
<p>在你創(chuàng)建這個文件之前,應(yīng)先理解一下ZF想讓你怎樣組織這些事情。ZF把訪問請求給拆分開來。假如訪問的是/foo/bar,則foo是controller,而bar是action。它們的默認(rèn)值都是index.</p>
<p>如果foo是controller,ZF就會去查找controllers目錄下的FooController.php文件。因?yàn)檫@個文件不存在,ZF就退回到IndexController.php。結(jié)果都沒有找到,就報錯了。</p>
<p>接下來,在controllers目錄創(chuàng)建IndexController.php文件(可以用setControllerDirectory()設(shè)置):</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
class IndexController extends Zend_Controller_Action 
{
  public function indexAction()
  {
    echo 'IndexController::indexAction()';
  }
}
&#63;>

</pre>

<p>就如剛才說明的,IndexController類處理來自index controller或controller不存在的請求。indexAction()方法處理action為index的訪問。要記住的是index是controller和action的默認(rèn)值。如果你訪問/,/index或/index/index,indexAction()方法就會被執(zhí)行。 (最后面的斜杠并不會改變這個行為。) 而訪問其他任何資源只會導(dǎo)致出錯。</p>
<p>在繼續(xù)做之前,還要在IndexController加上另外一個有用的類方法。不管什么時候訪問一個不存在的控制器,都要調(diào)用noRouteAction()類方法。例如,在FooController.php不存在的條件下,訪問/foo/bar就會執(zhí)行noRouteAction()。但是訪問/index/foo仍會出錯,因?yàn)閒oo是action,而不是controller.</p>
<p>將noRouteAction()添加到IndexController.php:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
class IndexController extends Zend_Controller_Action 
{
  public function indexAction()
  {
    echo 'IndexController::indexAction()';
  }
  public function noRouteAction()
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<p>例子中使用$this->_redirect('/')來描述執(zhí)行noRouteAction()時,可能發(fā)生的行為。這會將對不存在controllers的訪問重定向到根文檔(首頁)。</p>
<p>現(xiàn)在創(chuàng)建FooController.php:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
class FooController extends Zend_Controller_Action 
{
  public function indexAction()
  {
    echo 'FooController::indexAction()';
  }
  public function barAction()
  {
    echo 'FooController::barAction()';
  }
}
&#63;>

</pre>

<p>如果你再次訪問/foo/bar,你會發(fā)現(xiàn)執(zhí)行了barAction(),因?yàn)閎ar是action。現(xiàn)在你不只支持了友好的URL,還可以只用幾行代碼就做得這么有條理??岚?!<br />
你也可以創(chuàng)建一個__call()類方法來處理像/foo/baz這樣未定義的action。</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
class FooController extends Zend_Controller_Action 
{
  public function indexAction()
  {
    echo 'FooController::indexAction()';
  }
  public function barAction()
  {
    echo 'FooController::barAction()';
  }
  public function __call($action, $arguments)
  {
    echo 'FooController:__call()';
  }
}
&#63;>

</pre>

<p>現(xiàn)在你只要幾行代碼就可以很好地處理用戶的訪問了,準(zhǔn)備好繼續(xù)。</p>
<p><strong>Zend_View</strong></p>
<p>Zend_View是一個用來幫助你組織好你的view邏輯的類。這對于模板-系統(tǒng)是不可知的,為了簡單起見,本教程不使用模板。如果你喜歡的話,不妨用一下。</p>
<p>記住,現(xiàn)在所有的訪問都是由front controller進(jìn)行處理。因此應(yīng)用框架已經(jīng)存在了,另外也必須遵守它。為了展示Zend_View的一個基本應(yīng)用,將IndexController.php修改如下:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
Zend::loadClass('Zend_View');
class IndexController extends Zend_Controller_Action 
{
  public function indexAction()
  {
    $view = new Zend_View();
    $view->setScriptPath('/path/to/views');
    echo $view->render('example.php');
  }
  public function noRouteAction()
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<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>現(xiàn)在,如果你訪問自己網(wǎng)站的根資源,你會看到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><&#63;php echo $this->escape($this->title); &#63;></title>
</head>
<body>
  <&#63;php echo $this->escape($this->body); &#63;>
</body>
</html>

</pre>

<p>現(xiàn)在已經(jīng)添加了兩個功能。$this->escape()類方法用于所有的輸出。即使你自己創(chuàng)建輸出,就像這個例子一樣。避開所有輸出也是一個很好的習(xí)慣,它可以在默認(rèn)情況下幫助你防止跨站腳本攻擊(XSS)。</p>
<p>$this->title和$this->body屬性用來展示動態(tài)數(shù)據(jù)。這些也可以在controller中定義,所以我們修改IndexController.php以指定它們:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
Zend::loadClass('Zend_View');
class IndexController extends Zend_Controller_Action 
{
  public function indexAction()
  {
    $view = new Zend_View();
    $view->setScriptPath('/path/to/views');
    $view->title = 'Dynamic Title';
    $view->body = 'This is a dynamic body.';
    echo $view->render('example.php');
  }
  public function noRouteAction()
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<p>現(xiàn)在你再次訪問根目錄,應(yīng)該就可以看到模板所使用的這些值了。因?yàn)槟阍谀0逯惺褂玫?this就是在Zend_View范圍內(nèi)所執(zhí)行的實(shí)例。</p>
<p>要記住example.php只是一個普通的PHP腳本,所以你完全可以做你想做的。只是應(yīng)努力只在要求顯示數(shù)據(jù)時才使用模板。你的controller (controller分發(fā)的模塊)應(yīng)處理你全部的業(yè)務(wù)邏輯。</p>
<p>在繼續(xù)之前,我想做最后一個關(guān)于Zend_View的提示。在controller的每個類方法內(nèi)初始化$view對象需要額外輸入一些內(nèi)容,而我們的主要目標(biāo)是讓快速開發(fā)網(wǎng)絡(luò)應(yīng)用更簡單。如果所有模板都放在一個目錄下,是否要在每個例子中都調(diào)用setScriptPath()也存在爭議。</p>
<p>幸運(yùn)的是,Zend類包含了一個寄存器來幫助減少工作量。你可以用register()方法把你的$view對象存儲在寄存器:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::register('view', $view);
&#63;>

</pre>

<p>用registry()方法進(jìn)行檢索:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
$view = Zend::registry('view');
&#63;>

</pre>

<p>基于這點(diǎn),本教程使用寄存器。 </p>
<p><strong>Zend_InputFilter</strong></p>
<p>本教程討論的最后一個組件是Zend_InputFilter。這個類提供了一種簡單而有效的輸入過濾方法。你可以通過提供一組待過濾數(shù)據(jù)來進(jìn)行初始化。</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
$filterPost = new Zend_InputFilter($_POST);
&#63;>

</pre>

<p>這會將($_POST)設(shè)置為NULL,所以就不能直接進(jìn)入了。Zend_InputFilter提供了一個簡單、集中的根據(jù)特定規(guī)則過濾數(shù)據(jù)的類方法集。例如,你可以用getAlpha()來獲取$_POST['name']中的字母:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
/* $_POST['name'] = 'John123Doe'; */
$filterPost = new Zend_InputFilter($_POST);
/* $_POST = NULL; */
$alphaName = $filterPost->getAlpha('name');
/* $alphaName = 'JohnDoe'; */
&#63;>

</pre>

<p>每一個類方法的參數(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><strong>構(gòu)建新聞管理系統(tǒng)</strong></p>
<p>雖然預(yù)覽版提供了許多組件(甚至許多已經(jīng)被開發(fā)),我們已經(jīng)討論了構(gòu)建一個簡單程序所需要的全部組件。在這里,你會對ZF的基本結(jié)構(gòu)和設(shè)計有更清楚的理解。</p>
<p>每個人開發(fā)的程序都會有所不同,而Zend Framework試圖包容這些差異。同樣,這個教程是根據(jù)我的喜好寫的,請根據(jù)自己的偏好自行調(diào)整。</p>
<p>當(dāng)我開發(fā)程序時,我會先做界面。這并不意味著我把時間都花在標(biāo)簽、樣式表和圖片上,而是我從一個用戶的角度去考慮問題。因此我把程序看成是頁面的集合,每一頁都是一個獨(dú)立的網(wǎng)址。這個新聞系統(tǒng)就是由以下網(wǎng)址組成的:</p>
<p><span style="color: #0000ff">/<br />
/add/news<br />
/add/comment<br />
/admin<br />
/admin/approve<br />
/view/{id}</span></p>
<p>你可以直接把這些網(wǎng)址和controller聯(lián)系起來。IndexController列出新聞,AddController添加新聞和評論,AdminController處理一些如批準(zhǔn)新聞之類的管理,ViewController特定新聞和對應(yīng)評論的顯示。</p>
<p>如果你的FooController.php還在,把它刪除。修改IndexController.php,為業(yè)務(wù)邏輯以添加相應(yīng)的action和一些注釋:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
class IndexController extends Zend_Controller_Action 
{
  public function indexAction()
  {
    /* List the news. */
  }
  public function noRouteAction()
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<p>接下來,創(chuàng)建AddController.php文件:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
class AddController extends Zend_Controller_Action
{
  function indexAction()
  {
    $this->_redirect('/');
  }
  function commentAction()
  {
    /* Add a comment. */
  }
  function newsAction()
  {
    /* Add news. */
  }
  function __call($action, $arguments)
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<p>記住AddController的indexAction()方法不能調(diào)用。當(dāng)訪問/add時會執(zhí)行這個類方法。因?yàn)橛脩艨梢允止ぴL問這個網(wǎng)址,這是有可能的,所以你要把用戶重定向到主頁、顯示錯誤或你認(rèn)為合適的行為。</p>
<p>接下來,創(chuàng)建AdminController.php文件:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
class AdminController extends Zend_Controller_Action
{
  function indexAction()
  {
    /* Display admin interface. */
  }
  function approveAction()
  {
    /* Approve news. */
  }
  function __call($action, $arguments)
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<p>最后,創(chuàng)建ViewController.php文件:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
Zend::loadClass('Zend_Controller_Action');
class ViewController extends Zend_Controller_Action
{
  function indexAction()
  {
    $this->_redirect('/');
  }
  function __call($id, $arguments)
  {
    /* Display news and comments for $id. */
  }
}
&#63;>

</pre>

<p>和AddController一樣,index()方法不能調(diào)用,所以你可以使用你認(rèn)為合適的action。ViewController和其它的有點(diǎn)不同,因?yàn)槟悴恢朗裁床攀怯行У腶ction。為了支持像/view/23這樣的網(wǎng)址,你要使用__call()來支持動態(tài)action。</p>
<p><strong>數(shù)據(jù)庫操作</strong></p>
<p>因?yàn)閆end Framework的數(shù)據(jù)庫組件還不穩(wěn)定,而我希望這個演示可以做得簡單一點(diǎn)。我使用了一個簡單的類,用SQLite進(jìn)行新聞條目和評論的存儲和查詢。</p>

<pre class='brush:php;toolbar:false;'>
<&#63;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 ('$name', '$comment', '$newsId')";
    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 ('$title', '$content')";
    return $this->_db->query($sql);
  }
  public function approveNews($ids)
  {
    foreach ($ids as $id) {
      $id = sqlite_escape_string($id);
      $sql = "UPDATE news
          SET  approval = 'T'
          WHERE id = '$id'";
      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 = '$newsId'";
    if ($result = $this->_db->query($sql)) {
      return $result->fetchAll();
    }
    return FALSE;
  }
  public function getNews($id = 'ALL')
  {
    $id = sqlite_escape_string($id);
    switch ($id) {
      case 'ALL':
        $sql = "SELECT id,
                title
            FROM  news
            WHERE approval = 'T'";
        break;
      case 'NEW':
        $sql = "SELECT *
            FROM  news
            WHERE approval != 'T'";
        break;
      default:
        $sql = "SELECT *
            FROM  news
            WHERE id = '$id'";
        break;
    }
    if ($result = $this->_db->query($sql)) {
      if ($result->numRows() != 1) {
        return $result->fetchAll();
      } else {
        return $result->fetch();
      }
    }
    return FALSE;
  }
}
&#63;>

</pre>

<p>(你可以用自己的解決方案隨意替換這個類。這里只是為你提供一個完整示例的介紹,并非建議要這么實(shí)現(xiàn)。)</p>
<p>這個類的構(gòu)造器需要SQLite數(shù)據(jù)庫的完整路徑和文件名,你必須自己進(jìn)行創(chuàng)建。</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
$db = new SQLiteDatabase('/path/to/db.sqlite');
$db->query("CREATE TABLE news (
    id    INTEGER PRIMARY KEY,
    title  VARCHAR(255),
    content TEXT,
    approval CHAR(1) DEFAULT 'F'
  )");
$db->query("CREATE TABLE comments (
    id    INTEGER PRIMARY KEY,
    name   VARCHAR(255),
    comment TEXT,
    newsId  INTEGER
  )");
&#63;>

</pre>

<p>你只需要做一次,以后直接給出Database類構(gòu)造器的完整路徑和文件名即可:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
$db = new Database('/path/to/db.sqlite');
&#63;>

</pre>

<p><strong>整合</strong></p>
<p>為了進(jìn)行整合,在lib目錄下創(chuàng)建Database.php,loadClass()就可以找到它。你的index.php文件現(xiàn)在就會初始化$view和$db并存儲到寄存器。你也可以創(chuàng)建__autoload()函數(shù)自動加載你所需要的類:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
include 'Zend.php';
function __autoload($class)
{
  Zend::loadClass($class);
}
$db = new Database('/path/to/db.sqlite');
Zend::register('db', $db);
$view = new Zend_View;
$view->setScriptPath('/path/to/views');
Zend::register('view', $view);
$controller = Zend_Controller_Front::getInstance()
       ->setControllerDirectory('/path/to/controllers')
       ->dispatch();
&#63;>

</pre>

<p>接下來,在views目錄創(chuàng)建一些簡單的模板。index.php可以用來顯示index視圖:</p>

<pre class='brush:php;toolbar:false;'>
<html>
<head>
 <title>News</title>
</head>
<body>
 <h1>News</h1>
 <&#63;php foreach ($this->news as $entry) { &#63;>
 <p>
  <a href="/view/<&#63;php echo $this->escape($entry['id']); &#63;>">
  <&#63;php echo $this->escape($entry['title']); &#63;>
  </a>
 </p>
 <&#63;php } &#63;>
 <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>view.php模板可以用來顯示選定的新聞條目:</p>

<pre class='brush:php;toolbar:false;'>
<html>
<head>
 <title>
  <&#63;php echo $this->escape($this->news['title']); &#63;>
 </title>
</head>
<body>
 <h1>
  <&#63;php echo $this->escape($this->news['title']); &#63;>
 </h1>
 <p>
  <&#63;php echo $this->escape($this->news['content']); &#63;>
 </p>
 <h1>Comments</h1>
 <&#63;php foreach ($this->comments as $comment) { &#63;>
 <p>
  <&#63;php echo $this->escape($comment['name']); &#63;> writes:
 </p>
 <blockquote>
  <&#63;php echo $this->escape($comment['comment']); &#63;>
 </blockquote>
 <&#63;php } &#63;>
 <h1>Add a Comment</h1>
 <form action="/add/comment" method="POST">
 <input type="hidden" name="newsId" 
  value="<&#63;php echo $this->escape($this->id); &#63;>" />
 <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>最后,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">
 <&#63;php foreach ($this->news as $entry) { &#63;>
 <p>
  <input type="checkbox" name="ids[]"
  value="<&#63;php echo $this->escape($entry['id']); &#63;>" />
  <&#63;php echo $this->escape($entry['title']); &#63;>
  <&#63;php echo $this->escape($entry['content']); &#63;>
 </p>
 <&#63;php } &#63;>
 <p>
  Password:<br /><input type="password" name="password" />
 </p>
 <p><input type="submit" value="Approve" /></p>
 </form>
</body>
</html>

</pre>

<p>提示:為了保持簡單,這個表單用密碼作為驗(yàn)證機(jī)制。</p>
<p>使用到模板的地方,你只需要把注釋替換成幾行代碼。如IndexController.php就變成下面這樣:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
class IndexController extends Zend_Controller_Action 
{
  public function indexAction()
  {
    /* List the news. */
    $db = Zend::registry('db');
    $view = Zend::registry('view');
    $view->news = $db->getNews();
    echo $view->render('index.php');
  }
  public function noRouteAction()
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<p>因?yàn)闂l理比較清楚,這個程序首頁的整個業(yè)務(wù)邏輯只有四行代碼。AddController.php更復(fù)雜一點(diǎn),它需要更多的代碼:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
class AddController extends Zend_Controller_Action
{
  function indexAction()
  {
    $this->_redirect('/');
  }
  function commentAction()
  {
    /* Add a comment. */
    $filterPost = new Zend_InputFilter($_POST);
    $db = Zend::registry('db');
    $name = $filterPost->getAlpha('name');
    $comment = $filterPost->noTags('comment');
    $newsId = $filterPost->getDigits('newsId');
    $db->addComment($name, $comment, $newsId);
    $this->_redirect("/view/$newsId");
  }
  function newsAction()
  {
    /* Add news. */
    $filterPost = new Zend_InputFilter($_POST);
    $db = Zend::registry('db');
    $title = $filterPost->noTags('title');
    $content = $filterPost->noTags('content');
    $db->addNews($title, $content);
    $this->_redirect('/');
  }
  function __call($action, $arguments)
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<p>因?yàn)橛脩粼谔峤槐韱魏蟊恢囟ㄏ?,這個controller不需要視圖。</p>
<p>在AdminController.php,你要處理顯示管理界面和批準(zhǔn)新聞兩個action:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
class AdminController extends Zend_Controller_Action
{
  function indexAction()
  {
    /* Display admin interface. */
    $db = Zend::registry('db');
    $view = Zend::registry('view');
    $view->news = $db->getNews('NEW');
    echo $view->render('admin.php');
  }
  function approveAction()
  {
    /* Approve news. */
    $filterPost = new Zend_InputFilter($_POST);
    $db = Zend::registry('db');
    if ($filterPost->getRaw('password') == 'mypass') {
      $db->approveNews($filterPost->getRaw('ids'));
      $this->_redirect('/');
    } else {
      echo 'The password is incorrect.';
    }
  }
  function __call($action, $arguments)
  {
    $this->_redirect('/');
  }
}
&#63;>

</pre>

<p>最后是ViewController.php:</p>

<pre class='brush:php;toolbar:false;'>
<&#63;php
class ViewController extends Zend_Controller_Action
{
  function indexAction()
  {
    $this->_redirect('/');
  }
  function __call($id, $arguments)
  {
    /* Display news and comments for $id. */
    $id = Zend_Filter::getDigits($id);
    $db = Zend::registry('db');
    $view = Zend::registry('view');
    $view->news = $db->getNews($id);
    $view->comments = $db->getComments($id);
    $view->id = $id;
    echo $view->render('view.php');
  }
}
&#63;>

</pre>

<p>雖然很簡單,但我們還是提供了一個功能較全的新聞和評論程序。最好的地方是由于有較好的設(shè)計,增加功能變得很簡單。而且隨著Zend Framework越來越成熟,只會變得更好。</p>
<p><strong>更多信息</strong></p>
<p>這個教程只是討論了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><strong>結(jié)束語</strong></p>
<p>要對預(yù)覽版進(jìn)行評價是很容易的事,我在寫這個教程時也遇到很多困難。總的來說,我想Zend Framework顯示了承諾,加入的每個人都是想繼續(xù)完善它。</p>
<p>更多關(guān)于zend相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《Yii框架入門及常用技巧總結(jié)》、《ThinkPHP入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》</p>
<p>希望本文所述對大家基于Zend Framework框架的PHP程序設(shè)計有所幫助。</p>


<!--endmain-->

<h4 id="您可能感興趣的文章">您可能感興趣的文章:</h4>
<ul>
<li>Zend Framework框架教程之Zend_Db_Table_Rowset用法實(shí)例分析</li>
<li>Zend Framework教程之Zend_Db_Table_Row用法實(shí)例分析</li>
<li>Zend Framework教程之Zend_Db_Table用法詳解</li>
<li>Zend Framework教程之Zend_Form組件實(shí)現(xiàn)表單提交并顯示錯誤提示的方法</li>
<li>Zend Framework框架Smarty擴(kuò)展實(shí)現(xiàn)方法</li>
<li>Zend Framework框架路由機(jī)制代碼分析</li>
<li>Zend Framework實(shí)現(xiàn)具有基本功能的留言本(附demo源碼下載)</li>
<li>Zend Framework實(shí)現(xiàn)將session存儲在memcache中的方法</li>
<li>Zend Framework分頁類用法詳解</li>
<li>Zend Framework實(shí)現(xiàn)多文件上傳功能實(shí)例</li>
<li>Zend Framework入門之環(huán)境配置及第一個Hello World示例(附demo源碼下載)</li>
<li>Zend Framework教程之連接數(shù)據(jù)庫并執(zhí)行增刪查的方法(附demo源碼下載)</li>
<li>Zend Framework教程之Zend_Db_Table表關(guān)聯(lián)實(shí)例詳解</li>
</ul>
<p align="left"></p>
<div style="display:none;">
<span id="url" itemprop="url">http://www.bkjia.com/PHPjc/1113710.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/1113710.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">Zend Framework開發(fā)入門經(jīng)典教程,zendframework 本文講述了Zend Framework開發(fā)入門相關(guān)知識點(diǎn)。分享給大家供大家參考,具體如下: Zend Framework發(fā)布...</span>
</div>
<div   id="377j5v51b"   class="art_confoot"></div>



						</div>
					</div>
					<div   id="377j5v51b"   class="wzconShengming_sp">
						<div   id="377j5v51b"   class="bzsmdiv_sp">Déclaration de ce site Web</div>
						<div>Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter 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>Article chaud</h2>
							</div>
							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796832397.html" title="Guide de construction de Grass Wonder | Uma musume joli derby" class="phpgenera_Details_mainR4_bottom_title">Guide de construction de Grass Wonder | Uma musume joli derby</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>1 Il y a quelques mois</span>
										<span>By Jack chen</span>
									</div>
								</div>
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796833110.html" title="<??>: 99 nuits dans la forêt - tous les badges et comment les déverrouiller" class="phpgenera_Details_mainR4_bottom_title"><??>: 99 nuits dans la forêt - tous les badges et comment les déverrouiller</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>4 Il y a quelques semaines</span>
										<span>By DDD</span>
									</div>
								</div>
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796831605.html" title="Uma Musume Pretty Derby Banner Schedule (juillet 2025)" class="phpgenera_Details_mainR4_bottom_title">Uma Musume Pretty Derby Banner Schedule (juillet 2025)</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>1 Il y a quelques mois</span>
										<span>By Jack chen</span>
									</div>
								</div>
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796836699.html" title="Guide de température de Rimworld Odyssey pour les navires et Gravtech" class="phpgenera_Details_mainR4_bottom_title">Guide de température de Rimworld Odyssey pour les navires et Gravtech</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>3 Il y a quelques semaines</span>
										<span>By Jack chen</span>
									</div>
								</div>
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796831905.html" title="Windows Security est vide ou ne montre pas les options" class="phpgenera_Details_mainR4_bottom_title">Windows Security est vide ou ne montre pas les options</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>1 Il y a quelques mois</span>
										<span>By 下次還敢</span>
									</div>
								</div>
														</div>
							<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
								<a href="http://www.miracleart.cn/fr/article.html">Afficher plus</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>Outils d'IA chauds</h2>
								</div>
								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_bottom">
																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/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/fr/ai/undress-ai-tool" title="Undress AI Tool" class="phpmain_tab2_mids_title">
													<h3>Undress AI Tool</h3>
												</a>
												<p>Images de déshabillage gratuites</p>
											</div>
										</div>
																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/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/fr/ai/undresserai-undress" title="Undresser.AI Undress" class="phpmain_tab2_mids_title">
													<h3>Undresser.AI Undress</h3>
												</a>
												<p>Application basée sur l'IA pour créer des photos de nu réalistes</p>
											</div>
										</div>
																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/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/fr/ai/ai-clothes-remover" title="AI Clothes Remover" class="phpmain_tab2_mids_title">
													<h3>AI Clothes Remover</h3>
												</a>
												<p>Outil d'IA en ligne pour supprimer les vêtements des photos.</p>
											</div>
										</div>
																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/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/fr/ai/clothoffio" title="Clothoff.io" class="phpmain_tab2_mids_title">
													<h3>Clothoff.io</h3>
												</a>
												<p>Dissolvant de vêtements AI</p>
											</div>
										</div>
																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/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/fr/ai/video-swap" title="Video Face Swap" class="phpmain_tab2_mids_title">
													<h3>Video Face Swap</h3>
												</a>
												<p>échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!</p>
											</div>
										</div>
																</div>
								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
									<a href="http://www.miracleart.cn/fr/ai">Afficher plus</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>Article chaud</h2>
							</div>
							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796832397.html" title="Guide de construction de Grass Wonder | Uma musume joli derby" class="phpgenera_Details_mainR4_bottom_title">Guide de construction de Grass Wonder | Uma musume joli derby</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>1 Il y a quelques mois</span>
										<span>By Jack chen</span>
									</div>
								</div>
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796833110.html" title="<??>: 99 nuits dans la forêt - tous les badges et comment les déverrouiller" class="phpgenera_Details_mainR4_bottom_title"><??>: 99 nuits dans la forêt - tous les badges et comment les déverrouiller</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>4 Il y a quelques semaines</span>
										<span>By DDD</span>
									</div>
								</div>
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796831605.html" title="Uma Musume Pretty Derby Banner Schedule (juillet 2025)" class="phpgenera_Details_mainR4_bottom_title">Uma Musume Pretty Derby Banner Schedule (juillet 2025)</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>1 Il y a quelques mois</span>
										<span>By Jack chen</span>
									</div>
								</div>
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796836699.html" title="Guide de température de Rimworld Odyssey pour les navires et Gravtech" class="phpgenera_Details_mainR4_bottom_title">Guide de température de Rimworld Odyssey pour les navires et Gravtech</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>3 Il y a quelques semaines</span>
										<span>By Jack chen</span>
									</div>
								</div>
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/1796831905.html" title="Windows Security est vide ou ne montre pas les options" class="phpgenera_Details_mainR4_bottom_title">Windows Security est vide ou ne montre pas les options</a>
									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
										<span>1 Il y a quelques mois</span>
										<span>By 下次還敢</span>
									</div>
								</div>
														</div>
							<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
								<a href="http://www.miracleart.cn/fr/article.html">Afficher plus</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>Outils chauds</h2>
								</div>
								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_bottom">
																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/toolset/development-tools/92" title="Bloc-notes++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="Bloc-notes++7.3.1" />
											</a>
											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
												<a href="http://www.miracleart.cn/fr/toolset/development-tools/92" title="Bloc-notes++7.3.1" class="phpmain_tab2_mids_title">
													<h3>Bloc-notes++7.3.1</h3>
												</a>
												<p>éditeur de code facile à utiliser et gratuit</p>
											</div>
										</div>
																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/toolset/development-tools/93" title="SublimeText3 version chinoise" 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 version chinoise" />
											</a>
											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
												<a href="http://www.miracleart.cn/fr/toolset/development-tools/93" title="SublimeText3 version chinoise" class="phpmain_tab2_mids_title">
													<h3>SublimeText3 version chinoise</h3>
												</a>
												<p>Version chinoise, très simple à utiliser</p>
											</div>
										</div>
																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/toolset/development-tools/121" title="Envoyer 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="Envoyer Studio 13.0.1" />
											</a>
											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
												<a href="http://www.miracleart.cn/fr/toolset/development-tools/121" title="Envoyer Studio 13.0.1" class="phpmain_tab2_mids_title">
													<h3>Envoyer Studio 13.0.1</h3>
												</a>
												<p>Puissant environnement de développement intégré PHP</p>
											</div>
										</div>
																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/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/fr/toolset/development-tools/469" title="Dreamweaver CS6" class="phpmain_tab2_mids_title">
													<h3>Dreamweaver CS6</h3>
												</a>
												<p>Outils de développement Web visuel</p>
											</div>
										</div>
																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
											<a href="http://www.miracleart.cn/fr/toolset/development-tools/500" title="SublimeText3 version Mac" 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 version Mac" />
											</a>
											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
												<a href="http://www.miracleart.cn/fr/toolset/development-tools/500" title="SublimeText3 version Mac" class="phpmain_tab2_mids_title">
													<h3>SublimeText3 version Mac</h3>
												</a>
												<p>Logiciel d'édition de code au niveau de Dieu (SublimeText3)</p>
											</div>
										</div>
																	</div>
								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
									<a href="http://www.miracleart.cn/fr/ai">Afficher plus</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>Sujets chauds</h2>
							</div>
							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
									<a href="http://www.miracleart.cn/fr/faq/laravel-tutori" title="Tutoriel Laravel" class="phpgenera_Details_mainR4_bottom_title">Tutoriel Laravel</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/fr/faq/php-tutorial" title="Tutoriel PHP" class="phpgenera_Details_mainR4_bottom_title">Tutoriel PHP</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/fr/faq/zt">Afficher plus</a>
							</div>
						</div>
					</div>
				</div>
			</div>
							<div   id="377j5v51b"   class="Article_Details_main2">
					<div   id="377j5v51b"   class="phpgenera_Details_mainL4">
						<div   id="377j5v51b"   class="phpmain1_2_top">
							<a href="javascript:void(0);" class="phpmain1_2_top_title">Related knowledge<img
									src="/static/imghw/index2_title2.png" alt="" /></a>
						</div>
						<div   id="377j5v51b"   class="phpgenera_Details_mainL4_info">

													<div   id="377j5v51b"   class="phphistorical_Version2_mids">
								<a href="http://www.miracleart.cn/fr/faq/1796551949.html" title="Générez du PPT en un seul clic?! Kimi : Que les ? travailleurs migrants PPT ? deviennent d'abord populaires" class="phphistorical_Version2_mids_img">
									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
										src="/static/imghw/default1.png" class="lazy"  data-src="https://img.php.cn/upload/article/000/000/164/172249729336303.png?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Générez du PPT en un seul clic?! Kimi : Que les ? travailleurs migrants PPT ? deviennent d'abord populaires" />
								</a>
								<a href="http://www.miracleart.cn/fr/faq/1796551949.html" title="Générez du PPT en un seul clic?! Kimi : Que les ? travailleurs migrants PPT ? deviennent d'abord populaires" class="phphistorical_Version2_mids_title">Générez du PPT en un seul clic?! Kimi : Que les ? travailleurs migrants PPT ? deviennent d'abord populaires</a>
								<span id="377j5v51b"    class="Articlelist_txts_time">Aug 01, 2024 pm	 03:28 PM</span>
								<p class="Articlelist_txts_p">Kimi : En une seule phrase, un PPT est prêt en seulement dix secondes. PPT est tellement ennuyeux?! Pour tenir une réunion, vous devez avoir un PPT ; pour rédiger un rapport hebdomadaire, vous devez avoir un PPT ; pour solliciter des investissements, vous devez présenter un PPT ; même pour accuser quelqu'un de tricherie, vous devez envoyer un PPT ; L'université ressemble plus à une spécialisation PPT. Vous regardez le PPT en classe et faites le PPT après les cours. Peut-être que lorsque Dennis Austin a inventé le PPT il y a 37 ans, il ne s'attendait pas à ce qu'un jour le PPT devienne aussi répandu. Parler de notre dure expérience de création de PPT nous fait monter les larmes aux yeux. "Il m'a fallu trois mois pour réaliser un PPT de plus de 20 pages, et je l'ai révisé des dizaines de fois. J'avais envie de vomir quand j'ai vu le PPT." "à mon apogée, je faisais cinq PPT par jour, et même ma respiration." était PPT." Si vous avez une réunion impromptue, vous devriez le faire</p>
							</div>
														<div   id="377j5v51b"   class="phphistorical_Version2_mids">
								<a href="http://www.miracleart.cn/fr/faq/737071.html" title="Un didacticiel sur le modèle de diffusion qui vaut votre temps, de l'Université Purdue" class="phphistorical_Version2_mids_img">
									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
										src="/static/imghw/default1.png" class="lazy"  data-src="https://img.php.cn/upload/article/000/000/164/171245167345609.png?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Un didacticiel sur le modèle de diffusion qui vaut votre temps, de l'Université Purdue" />
								</a>
								<a href="http://www.miracleart.cn/fr/faq/737071.html" title="Un didacticiel sur le modèle de diffusion qui vaut votre temps, de l'Université Purdue" class="phphistorical_Version2_mids_title">Un didacticiel sur le modèle de diffusion qui vaut votre temps, de l'Université Purdue</a>
								<span id="377j5v51b"    class="Articlelist_txts_time">Apr 07, 2024 am	 09:01 AM</span>
								<p class="Articlelist_txts_p">La diffusion permet non seulement de mieux imiter, mais aussi de ? créer ?. Le modèle de diffusion (DiffusionModel) est un modèle de génération d'images. Par rapport aux algorithmes bien connus tels que GAN et VAE dans le domaine de l’IA, le modèle de diffusion adopte une approche différente. Son idée principale est un processus consistant à ajouter d’abord du bruit à l’image, puis à la débruiter progressivement. Comment débruiter et restaurer l’image originale est la partie centrale de l’algorithme. L'algorithme final est capable de générer une image à partir d'une image bruitée aléatoirement. Ces dernières années, la croissance phénoménale de l’IA générative a permis de nombreuses applications passionnantes dans la génération de texte en image, la génération de vidéos, et bien plus encore. Le principe de base de ces outils génératifs est le concept de diffusion, un mécanisme d'échantillonnage spécial qui surmonte les limites des méthodes précédentes.</p>
							</div>
														<div   id="377j5v51b"   class="phphistorical_Version2_mids">
								<a href="http://www.miracleart.cn/fr/faq/709468.html" title="Comment obtenir de l'aide sous Windows 11" class="phphistorical_Version2_mids_img">
									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
										src="/static/imghw/default1.png" class="lazy"  data-src="https://img.php.cn/upload/article/000/465/014/171048363557241.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Comment obtenir de l'aide sous Windows 11" />
								</a>
								<a href="http://www.miracleart.cn/fr/faq/709468.html" title="Comment obtenir de l'aide sous Windows 11" class="phphistorical_Version2_mids_title">Comment obtenir de l'aide sous Windows 11</a>
								<span id="377j5v51b"    class="Articlelist_txts_time">Mar 15, 2024 pm	 02:20 PM</span>
								<p class="Articlelist_txts_p">Après s'être habitué à l'interface des versions précédentes de Windows, il peut être difficile de s'adapter à Windows 11. Mais ne vous inquiétez pas, Windows 11 propose de nombreuses ressources d’aide pour vous aider à ma?triser plus facilement diverses fonctions. Cet article vous expliquera comment utiliser les outils fournis avec Windows 11 pour obtenir de l'aide afin que vous puissiez trouver rapidement des solutions officielles lorsque vous rencontrez des problèmes. Méthode 1?: utilisez l’application ??Mise en route?? L’application ??Mise en route?? de Windows 11 est un excellent mentor pour les débutants. Il aide les utilisateurs à compléter facilement les paramètres de base du système et introduit de nouvelles fonctionnalités de manière concise. Suivez ses conseils et vous vous familiariserez rapidement avec ce nouveau système d'exploitation. 1Cliquez sur le menu ? Démarrer ?, recherchez et cliquez sur l'application ? Mise en route ?, puis sélectionnez ? Commencer ?. Cliquez sur</p>
							</div>
														<div   id="377j5v51b"   class="phphistorical_Version2_mids">
								<a href="http://www.miracleart.cn/fr/faq/1796504460.html" title="Tous les prix CVPR 2024 annoncés?! Près de 10 000 personnes ont assisté à la conférence hors ligne et un chercheur chinois de Google a remporté le prix du meilleur article." class="phphistorical_Version2_mids_img">
									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
										src="/static/imghw/default1.png" class="lazy"  data-src="https://img.php.cn/upload/article/000/465/014/171887658653689.png?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Tous les prix CVPR 2024 annoncés?! Près de 10 000 personnes ont assisté à la conférence hors ligne et un chercheur chinois de Google a remporté le prix du meilleur article." />
								</a>
								<a href="http://www.miracleart.cn/fr/faq/1796504460.html" title="Tous les prix CVPR 2024 annoncés?! Près de 10 000 personnes ont assisté à la conférence hors ligne et un chercheur chinois de Google a remporté le prix du meilleur article." class="phphistorical_Version2_mids_title">Tous les prix CVPR 2024 annoncés?! Près de 10 000 personnes ont assisté à la conférence hors ligne et un chercheur chinois de Google a remporté le prix du meilleur article.</a>
								<span id="377j5v51b"    class="Articlelist_txts_time">Jun 20, 2024 pm	 05:43 PM</span>
								<p class="Articlelist_txts_p">T?t le matin du 20 juin, heure de Pékin, CVPR2024, la plus grande conférence internationale sur la vision par ordinateur qui s'est tenue à Seattle, a officiellement annoncé le meilleur article et d'autres récompenses. Cette année, un total de 10 articles ont remporté des prix, dont 2 meilleurs articles et 2 meilleurs articles étudiants. De plus, il y a eu 2 nominations pour les meilleurs articles et 4 nominations pour les meilleurs articles étudiants. La conférence la plus importante dans le domaine de la vision par ordinateur (CV) est la CVPR, qui attire chaque année un grand nombre d'instituts de recherche et d'universités. Selon les statistiques, un total de 11 532 articles ont été soumis cette année, dont 2 719 ont été acceptés, avec un taux d'acceptation de 23,6 %. Selon l'analyse statistique des données CVPR2024 du Georgia Institute of Technology, du point de vue des sujets de recherche, le plus grand nombre d'articles est la synthèse et la génération d'images et de vidéos (Imageandvideosyn</p>
							</div>
														<div   id="377j5v51b"   class="phphistorical_Version2_mids">
								<a href="http://www.miracleart.cn/fr/faq/1796558557.html" title="L'IA utilisée | L'IA a créé un vlog sur la vie d'une fille vivant seule, qui a re?u des dizaines de milliers de likes en 3 jours" class="phphistorical_Version2_mids_img">
									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
										src="/static/imghw/default1.png" class="lazy"  data-src="https://img.php.cn/upload/article/000/887/227/172304241362236.png?x-oss-process=image/resize,m_fill,h_207,w_330" alt="L'IA utilisée | L'IA a créé un vlog sur la vie d'une fille vivant seule, qui a re?u des dizaines de milliers de likes en 3 jours" />
								</a>
								<a href="http://www.miracleart.cn/fr/faq/1796558557.html" title="L'IA utilisée | L'IA a créé un vlog sur la vie d'une fille vivant seule, qui a re?u des dizaines de milliers de likes en 3 jours" class="phphistorical_Version2_mids_title">L'IA utilisée | L'IA a créé un vlog sur la vie d'une fille vivant seule, qui a re?u des dizaines de milliers de likes en 3 jours</a>
								<span id="377j5v51b"    class="Articlelist_txts_time">Aug 07, 2024 pm	 10:53 PM</span>
								<p class="Articlelist_txts_p">Rédacteur du Machine Power Report : Yang Wen La vague d’intelligence artificielle représentée par les grands modèles et l’AIGC a discrètement changé notre fa?on de vivre et de travailler, mais la plupart des gens ne savent toujours pas comment l’utiliser. C'est pourquoi nous avons lancé la rubrique ? AI in Use ? pour présenter en détail comment utiliser l'IA à travers des cas d'utilisation de l'intelligence artificielle intuitifs, intéressants et concis et stimuler la réflexion de chacun. Nous invitons également les lecteurs à soumettre des cas d'utilisation innovants et pratiques. Lien vidéo : https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ Récemment, le vlog de la vie d'une fille vivant seule est devenu populaire sur Xiaohongshu. Une animation de style illustration, associée à quelques mots de guérison, peut être facilement récupérée en quelques jours seulement.</p>
							</div>
														<div   id="377j5v51b"   class="phphistorical_Version2_mids">
								<a href="http://www.miracleart.cn/fr/faq/1796544567.html" title="Du bare metal au grand modèle avec 70 milliards de paramètres, voici un tutoriel et des scripts prêts à l'emploi" class="phphistorical_Version2_mids_img">
									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
										src="/static/imghw/default1.png" class="lazy"  data-src="https://img.php.cn/upload/article/000/465/014/172182321160025.png?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Du bare metal au grand modèle avec 70 milliards de paramètres, voici un tutoriel et des scripts prêts à l'emploi" />
								</a>
								<a href="http://www.miracleart.cn/fr/faq/1796544567.html" title="Du bare metal au grand modèle avec 70 milliards de paramètres, voici un tutoriel et des scripts prêts à l'emploi" class="phphistorical_Version2_mids_title">Du bare metal au grand modèle avec 70 milliards de paramètres, voici un tutoriel et des scripts prêts à l'emploi</a>
								<span id="377j5v51b"    class="Articlelist_txts_time">Jul 24, 2024 pm	 08:13 PM</span>
								<p class="Articlelist_txts_p">Nous savons que le LLM est formé sur des clusters informatiques à grande échelle utilisant des données massives. Ce site a présenté de nombreuses méthodes et technologies utilisées pour aider et améliorer le processus de formation LLM. Aujourd'hui, ce que nous souhaitons partager est un article qui approfondit la technologie sous-jacente et présente comment transformer un ensemble de ??bare?metals?? sans même un système d'exploitation en un cluster informatique pour la formation LLM. Cet article provient d'Imbue, une startup d'IA qui s'efforce d'atteindre une intelligence générale en comprenant comment les machines pensent. Bien s?r, transformer un tas de ? bare metal ? sans système d'exploitation en un cluster informatique pour la formation LLM n'est pas un processus facile, plein d'exploration et d'essais et d'erreurs, mais Imbue a finalement réussi à former un LLM avec 70 milliards de paramètres et dans. le processus s'accumule</p>
							</div>
														<div   id="377j5v51b"   class="phphistorical_Version2_mids">
								<a href="http://www.miracleart.cn/fr/faq/660870.html" title="Guide d'installation de PyCharm Community Edition?: ma?trisez rapidement toutes les étapes" class="phphistorical_Version2_mids_img">
									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
										src="/static/imghw/default1.png" class="lazy"  data-src="https://img.php.cn/upload/article/000/465/014/170631781359726.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Guide d'installation de PyCharm Community Edition?: ma?trisez rapidement toutes les étapes" />
								</a>
								<a href="http://www.miracleart.cn/fr/faq/660870.html" title="Guide d'installation de PyCharm Community Edition?: ma?trisez rapidement toutes les étapes" class="phphistorical_Version2_mids_title">Guide d'installation de PyCharm Community Edition?: ma?trisez rapidement toutes les étapes</a>
								<span id="377j5v51b"    class="Articlelist_txts_time">Jan 27, 2024 am	 09:10 AM</span>
								<p class="Articlelist_txts_p">Démarrage rapide avec PyCharm Community Edition?:?Tutoriel d'installation détaillé Analyse complète Introduction?: PyCharm est un puissant environnement de développement intégré (IDE) Python qui fournit un ensemble complet d'outils pour aider les développeurs à écrire du code Python plus efficacement. Cet article présentera en détail comment installer PyCharm Community Edition et fournira des exemples de code spécifiques pour aider les débutants à démarrer rapidement. étape 1 : Téléchargez et installez PyCharm Community Edition Pour utiliser PyCharm, vous devez d'abord le télécharger depuis son site officiel</p>
							</div>
														<div   id="377j5v51b"   class="phphistorical_Version2_mids">
								<a href="http://www.miracleart.cn/fr/faq/717976.html" title="A lire absolument pour les débutants en technique?: Analyse des niveaux de difficulté du langage C et Python" class="phphistorical_Version2_mids_img">
									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
										src="/static/imghw/default1.png" class="lazy"  data-src="https://img.php.cn/upload/article/000/887/227/171107406481267.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="A lire absolument pour les débutants en technique?: Analyse des niveaux de difficulté du langage C et Python" />
								</a>
								<a href="http://www.miracleart.cn/fr/faq/717976.html" title="A lire absolument pour les débutants en technique?: Analyse des niveaux de difficulté du langage C et Python" class="phphistorical_Version2_mids_title">A lire absolument pour les débutants en technique?: Analyse des niveaux de difficulté du langage C et Python</a>
								<span id="377j5v51b"    class="Articlelist_txts_time">Mar 22, 2024 am	 10:21 AM</span>
								<p class="Articlelist_txts_p">Titre?: Une lecture incontournable pour les débutants en technique?: Analyse des difficultés du langage C et de Python, nécessitant des exemples de code spécifiques. à l'ère numérique d'aujourd'hui, la technologie de programmation est devenue une capacité de plus en plus importante. Que vous souhaitiez travailler dans des domaines tels que le développement de logiciels, l'analyse de données, l'intelligence artificielle ou simplement apprendre la programmation par intérêt, choisir un langage de programmation adapté est la première étape. Parmi les nombreux langages de programmation, le langage C et Python sont deux langages de programmation largement utilisés, chacun ayant ses propres caractéristiques. Cet article analysera les niveaux de difficulté du langage C et Python</p>
							</div>
													</div>

													<a href="http://www.miracleart.cn/fr/be/" class="phpgenera_Details_mainL4_botton">
								<span>See all articles</span>
								<img src="/static/imghw/down_right.png" alt="" />
							</a>
											</div>
				</div>
					</div>
	</main>
	<footer>
    <div   id="377j5v51b"   class="footer">
        <div   id="377j5v51b"   class="footertop">
            <img src="/static/imghw/logo.png" alt="">
            <p>Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!</p>
        </div>
        <div   id="377j5v51b"   class="footermid">
            <a href="http://www.miracleart.cn/fr/about/us.html">à propos de nous</a>
            <a href="http://www.miracleart.cn/fr/about/disclaimer.html">Clause de non-responsabilité</a>
            <a href="http://www.miracleart.cn/fr/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="0niwk" class="pl_css_ganrao" style="display: none;"><strong id="0niwk"><address id="0niwk"><input id="0niwk"><em id="0niwk"></em></input></address></strong><abbr id="0niwk"></abbr><strong id="0niwk"></strong><acronym id="0niwk"></acronym><option id="0niwk"><acronym id="0niwk"><noframes id="0niwk"><center id="0niwk"></center></noframes></acronym></option><dfn id="0niwk"></dfn><dl id="0niwk"><sup id="0niwk"><strong id="0niwk"><acronym id="0niwk"></acronym></strong></sup></dl><th id="0niwk"></th><noframes id="0niwk"><span id="0niwk"></span></noframes><s id="0niwk"></s><input id="0niwk"></input><nobr id="0niwk"><tr id="0niwk"><option id="0niwk"></option></tr></nobr><rt id="0niwk"><delect id="0niwk"><rt id="0niwk"></rt></delect></rt><xmp id="0niwk"><li id="0niwk"><tbody id="0niwk"></tbody></li></xmp><tfoot id="0niwk"></tfoot><menu id="0niwk"></menu><dl id="0niwk"></dl><strike id="0niwk"><th id="0niwk"></th></strike><abbr id="0niwk"><tfoot id="0niwk"><track id="0niwk"></track></tfoot></abbr><xmp id="0niwk"></xmp><thead id="0niwk"></thead><track id="0niwk"></track><strike id="0niwk"></strike><meter id="0niwk"></meter><li id="0niwk"></li><small id="0niwk"></small><menu id="0niwk"><dd id="0niwk"><legend id="0niwk"></legend></dd></menu><delect id="0niwk"></delect><p id="0niwk"></p><table id="0niwk"></table><noframes id="0niwk"><center id="0niwk"><tr id="0niwk"></tr></center></noframes><input id="0niwk"><xmp id="0niwk"><li id="0niwk"></li></xmp></input><legend id="0niwk"><ul id="0niwk"><dl id="0niwk"></dl></ul></legend><tr id="0niwk"></tr><delect id="0niwk"></delect><fieldset id="0niwk"><center id="0niwk"><label id="0niwk"></label></center></fieldset><i id="0niwk"><meter id="0niwk"><bdo id="0niwk"></bdo></meter></i><optgroup id="0niwk"></optgroup><li id="0niwk"><dl id="0niwk"><button id="0niwk"></button></dl></li><td id="0niwk"></td><delect id="0niwk"></delect><strike id="0niwk"></strike><progress id="0niwk"></progress><ol id="0niwk"><option id="0niwk"></option></ol><optgroup id="0niwk"></optgroup><th id="0niwk"><noframes id="0niwk"><rt id="0niwk"><small id="0niwk"></small></rt></noframes></th><strong id="0niwk"><dfn id="0niwk"><label id="0niwk"></label></dfn></strong><menuitem id="0niwk"><code id="0niwk"><tr id="0niwk"></tr></code></menuitem><bdo id="0niwk"></bdo><small id="0niwk"></small><blockquote id="0niwk"></blockquote><strong id="0niwk"><acronym id="0niwk"></acronym></strong><acronym id="0niwk"></acronym><noframes id="0niwk"><center id="0niwk"><tr id="0niwk"></tr></center></noframes><blockquote id="0niwk"></blockquote><thead id="0niwk"><output id="0niwk"><fieldset id="0niwk"></fieldset></output></thead><s id="0niwk"><samp id="0niwk"><i id="0niwk"><del id="0niwk"></del></i></samp></s><rt id="0niwk"><small id="0niwk"><rt id="0niwk"></rt></small></rt><tbody id="0niwk"></tbody><output id="0niwk"><fieldset id="0niwk"><option id="0niwk"></option></fieldset></output><dl id="0niwk"><sup id="0niwk"><input id="0niwk"></input></sup></dl><dd id="0niwk"></dd><center id="0niwk"></center><em id="0niwk"></em><dl id="0niwk"><video id="0niwk"></video></dl><samp id="0niwk"><tbody id="0niwk"><dfn id="0niwk"></dfn></tbody></samp><em id="0niwk"><label id="0niwk"><kbd id="0niwk"><strong id="0niwk"></strong></kbd></label></em><u id="0niwk"><center id="0niwk"></center></u><strike id="0niwk"></strike><abbr id="0niwk"><progress id="0niwk"><track id="0niwk"></track></progress></abbr><listing id="0niwk"><pre id="0niwk"><menu id="0niwk"><pre id="0niwk"></pre></menu></pre></listing><div id="0niwk"></div><label id="0niwk"><sub id="0niwk"></sub></label><ruby id="0niwk"><dl id="0niwk"></dl></ruby><p id="0niwk"><mark id="0niwk"><listing id="0niwk"></listing></mark></p><nav id="0niwk"></nav><acronym id="0niwk"></acronym><label id="0niwk"></label><cite id="0niwk"></cite><em id="0niwk"></em><menu id="0niwk"></menu><code id="0niwk"><sup id="0niwk"><table id="0niwk"></table></sup></code><rt id="0niwk"></rt><tr id="0niwk"><nobr id="0niwk"><tr id="0niwk"><nav id="0niwk"></nav></tr></nobr></tr><th id="0niwk"><noframes id="0niwk"></noframes></th><pre id="0niwk"></pre><listing id="0niwk"><pre id="0niwk"></pre></listing><tbody id="0niwk"><del id="0niwk"><bdo id="0niwk"><output id="0niwk"></output></bdo></del></tbody><menuitem id="0niwk"><code id="0niwk"><sup id="0niwk"></sup></code></menuitem><dfn id="0niwk"><em id="0niwk"><td id="0niwk"></td></em></dfn><nav id="0niwk"><thead id="0niwk"><optgroup id="0niwk"><del id="0niwk"></del></optgroup></thead></nav><table id="0niwk"></table><center id="0niwk"></center><strike id="0niwk"><button id="0niwk"><source id="0niwk"></source></button></strike><sup id="0niwk"><table id="0niwk"><acronym id="0niwk"></acronym></table></sup><abbr id="0niwk"></abbr><th id="0niwk"><track id="0niwk"><ol id="0niwk"><pre id="0niwk"></pre></ol></track></th><pre id="0niwk"></pre><input id="0niwk"><em id="0niwk"><input id="0niwk"></input></em></input><th id="0niwk"></th></div>

</html>