<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 主頁 讓我們創建顯示您最近發布的主頁。 在我們開始之前,你應該至少知道一些關于Model-View-Presenter設計模式的基礎知識(類似于MVC): 模型(Model) - 數據操縱層。 它與應用程序的其余部分完全分離。 它只與控制器相接。 視圖(View) - 前端定義層。 它使用模板向用戶呈現所請求的數據。 控制器(Presenter) - 連接層。 Presenter連接模型和視圖。 處理請求,請求Model的數據,然后將它們傳遞到當前的View,其他的框架叫 Controller。 在一個非常簡單的應用程序,如我們的博客,Model層實際上只包括對數據庫本身的查詢 - 我們不需要任何額外的PHP代碼。 我們只需要創建Presenter和View圖層。 在Nette中,每個Presenter都有自己的Views,所以我們將同時繼續。 # 使用Adminer創建數據庫 要存儲數據,我們將使用MySQL數據庫,因為它是Web開發人員中最常見的選擇。 但是如果你不喜歡它,你可以選擇其他數據庫。 讓我們準備將存儲我們的博客帖子的數據庫。 我們可以非常簡單地開始 - 只需使用一個表格的帖子。 要創建數據庫,我們可以下載Adminer,或者您可以使用其他工具進行數據庫管理。 讓我們打開Adminer并創建一個名為quickstart的新數據庫。 http://localhost/Nette/sandbox/www/adminer/ ![](https://box.kancloud.cn/deb392835a365b49425f35437d9caa11_1366x599.png) 在這里我不喜歡用這個軟件來管理,所以我用其他數據庫管理軟件。我想你們也應和我一樣有自已喜歡數據庫管理軟件。 所以我們用軟件創建一個quickstart數據庫 ![](https://box.kancloud.cn/389b0c6126f6e747586463a4fa670760_129x38.png) 創建一個名為posts的新表,注意一定要使用InnoDB類并添加以下列: id int, click on autoincrement (AI) title varchar, length 255 content text created_at timestamp ![](https://box.kancloud.cn/243e8c4a25df37abce4cb44ef53af79e_828x485.png) 使用InnoDB表存儲非常重要。 你會在稍后看到原因。 現在,只需選擇并提交。 您可以點擊立即保存。 在我們實現從我們的應用程序直接添加新帖子的功能之前,請嘗試添加一些示例博客帖子。 INSERT INTO `posts` (`id`, `title`, `content`, `created_at`) VALUES (1, 'Article One', 'Lorem ipusm dolor one', CURRENT_TIMESTAMP), (2, 'Article Two', 'Lorem ipsum dolor two', CURRENT_TIMESTAMP), (3, 'Article Three', 'Lorem ipsum dolor three', CURRENT_TIMESTAMP); ![](https://box.kancloud.cn/97f369844d44498923c9b5aac2341d92_1366x736.png) # 連接到數據庫 現在,當數據庫創建并且我們有一些帖子,現在我們要配置Nette數據庫連接選擇。 首先,我們需要告訴我們的應用程序使用哪個數據庫。 數據庫連接配置存儲在app / config / config.local.neon中。 設置連接DSN和您的憑據。 它應該看起來像這樣: database: dsn: 'mysql:host=127.0.0.1;dbname=quickstart' user: root password: root options: lazy: yes user和password是根據自已MYSQL來設置上去。 注意:在編輯此文件時,請注意縮進。 NEON格式接受空格和制表符,但不能同時接受空格和制表符。 Web項目中的配置文件使用選項卡作為默認值。 整個配置包括存儲在app / confing /文件confing.neon和config.local.neon中。 文件config.neon包含應用程序的全局配置,config.local.neon僅包含特定于環境的參數(例如,開發和生產服務器之間的區別)。 # 數據庫連接 我們主頁是要顯示所有文章,所以我們選做一個控制器來要求顯示所有文單出來。 控制器(位于app / presenters / HomepagePresenter.php)(將列出文章)需要數據庫連接。 要接收它,寫一個這樣的構造函數: ~~~ <?php namespace App\Presenters; use Nette; use App\Model; class HomepagePresenter extends Nette\Application\UI\Presenter { /** @var Nette\Database\Context */ private $database; public function __construct(Nette\Database\Context $database) { $this->database = $database; } // ... } ~~~ 注意:因為 HomepagePresenter.php文件里有代碼,所以我們先清空他,再粘貼以上代碼進去就可以了。 ![](https://box.kancloud.cn/c560eea1664a0ca4f8f6efad02b5b6d6_653x432.png) 可能有些人不太了解這是什么意思。從private $database;看出來,這是要求這個HomepagePresenter類默認一開始通過數據庫配置(config.local.neon)連接到數據庫。如果不連接數據我們怎么查到數據庫里面的數據呢?!明白了吧,所以以后我們做一個控制器要連到數據庫時都要取以上的代碼!這就是數據庫連接。 # 從數據庫加載帖子 現在讓我們從數據庫中獲取這些帖子,并將它們傳遞給模板,然后再渲染HTML代碼。 這就是所謂的渲染方法 ~~~ public function renderDefault() { $this->template->posts = $this->database->table('posts') ->order('created_at DESC') ->limit(5); } ~~~ 把以上代碼加進剛才網頁中。 ![](https://box.kancloud.cn/133f43f42c64eee8763622e97a5b9e98_727x582.png) 以上代碼就是把posts表中所有的貼子取出來,并按DESC排序,只顯示5條。 控制器現在有一個render方法renderDefault()將數據傳遞到一個名為default的視圖。控制器模板可以在中找到: app/presenters/templates/{PresenterName}/{viewName}.latte {PresenterName}:HomepagePresenter.php就是控制器前面Homepage。 {viewName}: renderDefault()就是后面Default。 所以模板視圖就應在 app/presenters/templates/Homepage/Default.latte 在模板中,名為$ posts的變量現在可用,它包含數據庫中的帖子。 # 模板 有一個用于整個頁面的通用模板(稱為布局,包括頭,樣式表,頁腳,...),然后是每個視圖的特定模板(例如,用于顯示博客帖子的列表),其可以覆蓋一些布局模板部分。 默認情況下,布局模板位于app/presenters/templates/@layout.latte中,其中包含: ~~~ ... {include content} ... ~~~ ![](https://box.kancloud.cn/7f6feef7139a29f315051c39e2fd7212_382x207.png) 以上意思是公用模板。 {include content}在主模板中插入一個名為content的塊。 您可以在每個視圖的模板中定義它。 在這種情況下,我們將編輯文件app / presenters / templates / Hompeage / default.latte,如下所示: {block content} 它定義了將插入到布局中的內容塊。 如果刷新瀏覽器,您將看到一個包含文本“Hello word”的頁面(源代碼中還包含在@ layout.latte中定義的HTML標題和頁腳)。 讓我們顯示博客文章 - 我們將編輯模板如下: ~~~ {block content} <h1 n:block="title">M?j blog</h1> {foreach $posts as $post} <div class="post"> <div class="date">{$post->created_at|date:'F j, Y'}</div> <h2>{$post->title}</h2> <div>{$post->content}</div> </div> {/foreach} {/block} ~~~ ![](https://box.kancloud.cn/13a54772259ef405ddf7722546b0fe47_595x289.png) 我們刷新一下主頁 ![](https://box.kancloud.cn/d14a7c19612ce486514d41e106f62a9d_458x507.png) 主頁顯示了文章。 列表不是很奇特或多彩,所以隨意添加一些閃亮的CSS到www / css / style.css。 {foreach}不斷讀取$ posts變量中傳遞給模板的所有帖子,并為每個帖子顯示一段HTML代碼。 | date: 被稱為過濾器。 過濾器用于格式化輸出。 此方法將給定的時間戳(例如2013-04-12)轉換為漂亮且可讀的日期格式(2013年4月12日)。 您可以在文檔中找到更多預定義的過濾器(后面會一個一個說出來),或者如果需要,您可以添加自己的過濾器。 還有一件事。 我們可以使代碼稍微更短,因此更簡單。 我們可以用n:屬性替換latte,如下所示: ~~~ <div n:foreach="$posts as $post" class="post"> <div class="date">{$post->created_at|date:'F j, Y'}</div> <h2>{$post->title}</h2> <div>{$post->content}</div> </div> ~~~ n:foreach,只是用一個foreach塊來包裝div(它和前面的代碼塊完全一樣)。 通過以上。我學習到了 **應用程序連接到數據庫并顯示一個簡單的帖子列表。**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看