中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

一文帶你了解laravel5

發布時間:2020-12-10 14:47:17 來源:億速云 閱讀:112 作者:Leah 欄目:開發技術

一文帶你了解laravel5?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

目錄結構變化

laravel5最先強調的是項目目錄結構的變化,與4.2區別還是蠻大的,逐條來說吧。

新的目錄結構看上去像這樣:

app
    Commands
    Console
    Events
    Handlers
        Commands
        Events
    Http
        Controllers
        Middleware
        Requests
        Kernel.php
        routes.php
    Providers
    Services
bootstrap
config
database
    migrations
    seeds
public
    package
resources
    lang
    views
storage
    cache
    logs
    meta
    sessions
    views
    work
tests

4.2的目錄結構:

app
    commands
    config
    controllers
    database
    lang
    models
    start
    storage
    tests
    views
bootstrap
public
對比一下,改變還是比較大的,可以看到 config,database被移動到根目錄,lang,views目錄被移動到resources目錄下,controllers被整合到http目錄里,models目錄不見了,還有一些新增的目錄就略了。

App命名空間

laravel5里還有一個變化,那就是app目錄默認加上了一個根命名空間 App ,在 App 下的所有目錄、類都應當在該命名空間下,簡而言之就是采用了psr4標準。

HTTP

laravel5認為,新的目錄結構是目前最好的結構之一,可以讓我們的開發更加得心應手,比如http目錄:

Http
    Controllers
    Middleware
    Requests
    Kernel.php
    routes.php
Middleware 很陌生,其實它是原來的路由filter的一個升級版,現在不用在filters.php里定義過濾器,取而代之的是在 Middleware 目錄中創建類,并在Kernel.php中配置全局還是可選,全局的Middleware在每個請求都會執行,而可選的就相當于原來的filter,可以在路由中使用,也可以在控制器中使用。

Requests是對核心類Request的擴展,你可以擴展不同的Requests類,添加不同的功能。

可以認為,所有關于http請求有關的處理都在http目錄中,比如控制器就是用來接受一個請求并返回的,所以將它放在 Http 目錄里合情合理。

路由

路由跟以前的區別不大,但是需要注意的當我們指定控制器命名空間時,命名空間不是絕對路徑,而是相對于 App\Http\Controllers,舉例:

復制代碼 代碼如下:

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
]);

可以在 App/Http/Controllers/Auth 目錄下找到對應的類。

此外,路由還支持緩存,以提升性能,通過命令行工具

復制代碼 代碼如下:

php artisan route:cache

即可輕松生成,也可以通過

復制代碼 代碼如下:

php artisan route:clear

清理緩存。

Services

我們看到在App目錄下還有一個Services目錄,我覺得這是一個很贊的理念,一直以來,我都對于控制器中出現大段的業務邏輯代碼而煩躁,我很想用一個單獨的層把這些業務邏輯封裝起來,而services就可以用來干這個活,當然,它不是必須的,但我強烈建議使用。就以laravel5自帶的demo來看看吧:

復制代碼 代碼如下:

# Http/Controllers/Auth/AuthController.php
<&#63;php namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\Registrar;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller {
    /*
    |--------------------------------------------------------------------------
    | Registration & Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users, as well as the
    | authentication of existing users. By default, this controller uses
    | a simple trait to add these behaviors. Why don't you explore it&#63;
    |
    */
    use AuthenticatesAndRegistersUsers;
    /**
     * Create a new authentication controller instance.
     *
     * @param  \Illuminate\Contracts\Auth\Guard  $auth
     * @param  \Illuminate\Contracts\Auth\Registrar  $registrar
     * @return void
     */
    public function __construct(Guard $auth, Registrar $registrar)
    {
        $this->auth = $auth;
        $this->registrar = $registrar;
        $this->middleware('guest', ['except' => 'getLogout']);
    }
}

這是一個登陸授權的控制器,我們看 __construct構造函數,利用參數自動注入了一個 "接口實現(參考手冊IoC)" 的綁定,我們看下Registrar:

復制代碼 代碼如下:

<&#63;php namespace App\Services;
use App\User;
use Validator;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
class Registrar implements RegistrarContract {
    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    public function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
    }
    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    public function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

提交用戶名密碼時的處理:

復制代碼 代碼如下:

public function postRegister(Request $request)
{
    $validator = $this->registrar->validator($request->all());
    if ($validator->fails())
    {
        $this->throwValidationException(
            $request, $validator
        );
    }
    $this->auth->login($this->registrar->create($request->all()));
    return redirect($this->redirectPath());
}

可以看到,表單驗證的業務邏輯僅僅一行:

 代碼如下:
$validator = $this->registrar->validator($request->all());

整個控制器的代碼顯得干凈易讀,我們可以把很多通用的業務邏輯封裝成service,比不倫不類地直接封裝在控制器類好。

模型

models目錄不見了,因為不是所有應用都需要用到數據庫的,所以laravel5默認不提供該目錄可以理解,而且由于提供了 App 這個namespace,所以我們可以自己在 App/ 下創建 Models 目錄,其中所有模型類都聲名namespace App\Models;即可,只是使用上比以前麻煩一些,需要先use,不過這樣也使得項目結構更加清晰,一切類庫都在命名空間的組織之下。

看完上述內容,你們掌握一文帶你了解laravel5的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤山县| 常州市| 宁都县| 鹤山市| 长沙市| 荣成市| 海淀区| 饶阳县| 蒙阴县| 洛浦县| 鲁山县| 都兰县| 响水县| 武定县| 长泰县| 景洪市| 克拉玛依市| 铜陵市| 丰都县| 务川| 霍林郭勒市| 磴口县| 永安市| 平湖市| 河南省| 淮南市| 怀远县| 交城县| 娄烦县| 墨竹工卡县| 乌鲁木齐县| 贵州省| 信丰县| 垣曲县| 西宁市| 屏山县| 江山市| 平顺县| 新安县| 定日县| 建阳市|