程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Laravel 4 初級教程之Pages、表單驗證,laravelpages

Laravel 4 初級教程之Pages、表單驗證,laravelpages

編輯:關於PHP編程

Laravel 4 初級教程之Pages、表單驗證,laravelpages


1. 構建Pages管理功能

運行命令:

php artisan generate:controller admin/PagesController

修改PagesController.php 內容:

<?php
namespace App\Controllers\Admin;
use Page;
use Input, Notification, Redirect, Sentry, Str;
use App\Services\Validators\PageValidator;
class PagesController extends \BaseController {
    public function index()
    {
        return \View::make('admin.pages.index')->with('pages', Page::all());
    }
    public function show($id)
    {
        return \View::make('admin.pages.show')->with('page', Page::find($id))->withAuthor(Sentry::findUserById(Page::find($id)->user_id)->name);
    }
    public function create()
    {
        return \View::make('admin.pages.create');
    }
    public function store()
    {
        $validation = new PageValidator;
        if ($validation->passes())
        {
      $page          = new Page;
      $page->title   = Input::get('title');
      $page->body    = Input::get('body');
      $page->user_id = Sentry::getUser()->id;
            $page->save();
            Notification::success('新增頁面成功!');
            return Redirect::route('admin.pages.edit', $page->id);
        }
        return Redirect::back()->withInput()->withErrors($validation->errors);
    }
    public function edit($id)
    {
        return \View::make('admin.pages.edit')->with('page', Page::find($id));
    }
    public function update($id)
    {
        $validation = new PageValidator;
        if ($validation->passes())
        {
      $page          = Page::find($id);
      $page->title   = Input::get('title');
      $page->body    = Input::get('body');
      $page->user_id = Sentry::getUser()->id;
            $page->save();
            Notification::success('更新頁面成功!');
            return Redirect::route('admin.pages.edit', $page->id);
        }
        return Redirect::back()->withInput()->withErrors($validation->errors);
    }
    public function destroy($id)
    {
        $page = Page::find($id);
        $page->delete();
        Notification::success('刪除成功!');
        return Redirect::route('admin.pages.index');
    }
}

然後,打開http://localhost:8000/admin 頁面,用之前 seed 進去的賬號密碼登錄,我們會得到一個錯誤:

Class App\Controllers\Admin\PagesController does not exist

這個文件明明已經有了啊,為什麼Laravel報錯說沒有呢?!原因在第二篇教程裡,我在這裡直接說了吧。因為這個類不在頂級命名空間下,而我們沒有告訴Laravel我們已經新添了一個子命名空間下的類。我們現在來告訴它:

composer dump-autoload

OK,刷新,我們又會得到以下錯誤:

View [admin.pages.index] not found.

這時候,把我的視圖中的整個pages文件夾復制過去吧。

刷新。你會得到以下錯誤:

Class 'Notification' not found

這是因為我們還沒有裝這個composer包,edvinaskrucas/notification,請自行安裝3.0.1 版(4是為 Laravel 5 准備的),這是第三個小作業。一定要放在 require 裡面,require-dev 裡面的包只在開發的時候使用。

這裡的Notification 就是那個更好用的通知組件。

這個包裝好以後,運行:

composer dump-autoload

然後在 config/app.php 裡面恰當的位置分別增加下面兩行:

'Krucas\Notification\NotificationServiceProvider'
'Notification' => 'Krucas\Notification\Facades\Notification'

恰當的位置很多人不理解,導致很多人出現了錯誤,解決方式也很簡單:請直接參考我的示例代碼:https://github.com/johnlui/Learn-Laravel-4/blob/master/app/config/app.php

刷新,如果你看到以下界面:


恭喜你~ Pages的管理頁面完成了!

2. 表單驗證

Laravel提供了原生的非常好用的表單驗證功能,但是有時候驗證規則需要復用,所以我們將利用強大的命名空間來實現代碼復用,同時將展示Laravel之外的,PHP的命名空間帶來的強大的組件化功能和模塊解耦,HMVC什麼的已經落後啦。

新建app/services/validators 兩級文件夾,並在composer.json的 autoload > classmap 最後新增:

"app/services"

這是在告訴composer:來把我下面的所有文件和子文件夾中的所有文件合並到你的命名空間樹上吧! 這樣就讓 app/services 下的類可以聲明自己的命名空間了,子文件夾中的文件也可以聲明的自己屬於子命名空間了。這個文件夾將承載我們的表單驗證類群,當然也可以承載許多其他組件和模塊,實現完全解耦。

添加完成後,新建app/services/validators/Validator.php 文件:

<?php
namespace App\Services\Validators;
abstract class Validator {
    protected $data;
    public $errors;
    public static $rules;
    public function __construct($data = null)
    {
        $this->data = $data ?: \Input::all();
    }
    public function passes()
    {
        $validation = \Validator::make($this->data, static::$rules);
        if ($validation->passes()) return true;
        $this->errors = $validation->messages();
        return false;
    }
}

新建app/services/validators/PageValidator.php 文件:

<?php
namespace App\Services\Validators;
class PageValidator extends Validator {
    public static $rules = array(
        'title' => 'required',
        'body'  => 'required',
    );
}

然後運行:

composer dump-autoload

這時候,就可以嘗試整個頁面上的所有操作啦!新建,編輯,查看,刪除,至此,pages管理部分全部完成!

大作業:目前Pages管理部分已經全部完成,但是Articles管理部分還是啥都沒有,嘗試模仿Pages的代碼,完成一個跟Pages一樣的管理系統。小提示:包含 控制器、視圖和表單驗證哦。等你完成了Articles管理部分,Laravel就真正入門啦!


什是Laravel?

它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網絡APP,而且每行代碼都可以簡潔、富於表達力。1、Bundle是Laravel的擴展包組織形式或稱呼。Laravel的擴展包倉庫已經相當成熟了,可以很容易的幫你把擴展包(bundle)安裝到你的應用中。你可以選擇下載一個擴展包(bundle)然後拷貝到bundles目錄,或者通過命令行工具“Artisan”自動安裝。2、在Laravel中已經具有了一套高級的PHP ActiveRecord實現 -- Eloquent ORM。它能方便的將“約束(constraints)”應用到關系的雙方,這樣你就具有了對數據的完全控制,而且享受到ActiveRecord的所有便利。Eloquent原生支持Fluent中查詢構造器(query-builder)的所有方法。3、應用邏輯(Application Logic)可以在控制器(controllers)中實現,也可以直接集成到路由(route)聲明中,並且語法和Sinatra框架類似。Laravel的設計理念是:給開發者以最大的靈活性,既能創建非常小的網站也能構建大型的企業應用。4、反向路由(Reverse Routing)賦予你通過路由(routes)名稱創建鏈接(URI)的能力。只需使用路由名稱(route name),Laravel就會自動幫你創建正確的URI。這樣你就可以隨時改變你的路由(routes),Laravel會幫你自動更新所有相關的鏈接。5、Restful控制器(Restful Controllers)是一項區分GET和POST請求邏輯的可選方式。比如在一個用戶登陸邏輯中,你聲明了一個get_login()的動作(action)來處理獲取登陸頁面的服務;同時也聲明了一個post_login()動作(action)來校驗表單POST過來的數據,並且在驗證之後,做出重新轉向(redirect)到登陸頁面還是轉向控制台的決定。6、自動加載類(Class Auto-loading)簡化了類(class)的加載工作,以後就可以不用去維護自動加載配置表和非必須的組件加載工作了。當你想加載任何庫(library)或模型(model)時,立即使用就行了,Laravel會自動幫你加載需要的文件。7、視圖組裝器(View Composers)本質上就是一段代碼,這段代碼在視圖(View)加載時會自動執行。最好的例子就是博客中的側邊隨機文章推薦,“視圖組裝器”中包含了加載隨機文章推薦的邏輯,這樣,你只需要加載內容區域的視圖(view)就行了,其它的事情Laravel會幫你自動完成。8、反向控制容器(IoC container)提供了生成新對象、隨時實例化對象、訪問單例(singleton)對象的便捷方式。反向控制(IoC)意味著你幾乎不需要特意去加載外部的庫(libraries),就可以在代碼中的任意位置訪問這些對象,並且不需要忍受繁雜、冗余的代碼結構。9、遷移(Migrations)就像是版本控制(version control)工具,不過,它管理的是數據庫范式,並且直接集成在了Laravel中。你可以使用“Artisan”命令行工具生成、執行“遷移”指令。當你的小組成員改變了數據庫范式的時候,你就可以輕松的通過版本控制工具更新當前工程,然後執行“遷移指令即可,好了,你的數據庫已經是最新的了!11、自動分頁(Automatic Pagination)功能避免了在你的業務邏輯中混入大量無關分頁配置代碼。方便的是不需要記住當前頁......余下全文>>
 

什是Laravel?

它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網絡APP,而且每行代碼都可以簡潔、富於表達力。1、Bundle是Laravel的擴展包組織形式或稱呼。Laravel的擴展包倉庫已經相當成熟了,可以很容易的幫你把擴展包(bundle)安裝到你的應用中。你可以選擇下載一個擴展包(bundle)然後拷貝到bundles目錄,或者通過命令行工具“Artisan”自動安裝。2、在Laravel中已經具有了一套高級的PHP ActiveRecord實現 -- Eloquent ORM。它能方便的將“約束(constraints)”應用到關系的雙方,這樣你就具有了對數據的完全控制,而且享受到ActiveRecord的所有便利。Eloquent原生支持Fluent中查詢構造器(query-builder)的所有方法。3、應用邏輯(Application Logic)可以在控制器(controllers)中實現,也可以直接集成到路由(route)聲明中,並且語法和Sinatra框架類似。Laravel的設計理念是:給開發者以最大的靈活性,既能創建非常小的網站也能構建大型的企業應用。4、反向路由(Reverse Routing)賦予你通過路由(routes)名稱創建鏈接(URI)的能力。只需使用路由名稱(route name),Laravel就會自動幫你創建正確的URI。這樣你就可以隨時改變你的路由(routes),Laravel會幫你自動更新所有相關的鏈接。5、Restful控制器(Restful Controllers)是一項區分GET和POST請求邏輯的可選方式。比如在一個用戶登陸邏輯中,你聲明了一個get_login()的動作(action)來處理獲取登陸頁面的服務;同時也聲明了一個post_login()動作(action)來校驗表單POST過來的數據,並且在驗證之後,做出重新轉向(redirect)到登陸頁面還是轉向控制台的決定。6、自動加載類(Class Auto-loading)簡化了類(class)的加載工作,以後就可以不用去維護自動加載配置表和非必須的組件加載工作了。當你想加載任何庫(library)或模型(model)時,立即使用就行了,Laravel會自動幫你加載需要的文件。7、視圖組裝器(View Composers)本質上就是一段代碼,這段代碼在視圖(View)加載時會自動執行。最好的例子就是博客中的側邊隨機文章推薦,“視圖組裝器”中包含了加載隨機文章推薦的邏輯,這樣,你只需要加載內容區域的視圖(view)就行了,其它的事情Laravel會幫你自動完成。8、反向控制容器(IoC container)提供了生成新對象、隨時實例化對象、訪問單例(singleton)對象的便捷方式。反向控制(IoC)意味著你幾乎不需要特意去加載外部的庫(libraries),就可以在代碼中的任意位置訪問這些對象,並且不需要忍受繁雜、冗余的代碼結構。9、遷移(Migrations)就像是版本控制(version control)工具,不過,它管理的是數據庫范式,並且直接集成在了Laravel中。你可以使用“Artisan”命令行工具生成、執行“遷移”指令。當你的小組成員改變了數據庫范式的時候,你就可以輕松的通過版本控制工具更新當前工程,然後執行“遷移指令即可,好了,你的數據庫已經是最新的了!11、自動分頁(Automatic Pagination)功能避免了在你的業務邏輯中混入大量無關分頁配置代碼。方便的是不需要記住當前頁......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved