laravel5.2的新功能

上一節課咱們學了laravel5.3的新特性 https://my.oschina.net/lilugirl2005/blog/787478php

這節課主要講一些laravel5.2的新特性在laravel5.3的基礎上演示laravel

咱們仍是以10yue.live網站爲例 web

laravel5.2的新功能

路由模型綁定

實例:routes/web.php頁面中添加路由數據庫

Route::get('/user/{user}',function(\App\User $user){
   return $user;
});

Route::get('/post/{post}',function(\App\Post $post){
   return $post;
});

訪問  https://10yue.live/post/3  或者 https://10yue.live/user/4 測試瀏覽器

那若是我想經過用戶表的username字段訪問用戶信息改如何作呢?bash

作到這點請確保username是不重複的值服務器

首先我須要在user表裏增長一個username的字段數據結構

修改/database/migrations的用戶表文件  增長username字段
app

相應的修改/database/factories/ModelFactory.php文件 $faker->userName能夠生成不重複的假用戶名ide

清空數據庫 從新執行數據結構生成命令  php artisan migrate:refresh

(若是是生產環境的數據,請勿執行,由於全部數據會被清空)

執行tinker命令生成10條用戶數據

修改app/Providers/RouteServiceProvider.php文件 添加以下代碼

且routes/web.php代碼改成

在數據庫中隨便查找一個username

在瀏覽器鍵入地址https://10yue.live/user/alarkin  測試成功!

訪問次數限制

舉例 修改routes/web.php 的post路由 爲其添加middleware 這個設置默認限制路由訪問次數一分鐘不超過60次

咱們能夠用httpie這個工具模擬http請求 ,首先要下載安裝httpie

mac下安裝httpie的命令是 brew install httpie

安裝成功後在本地mac機器上敲入http命令 訪問http://10yue.live/post/1看看

經過審查元素咱們也能夠分析到這個頁面的頭部信息

刷新頁面會看到 X-RateLimit-Remaining的值一直在變

修改routes/web.php 的post路由 將一分鐘的訪問次數限制改成3

在瀏覽器上刷新三次頁面http://10yue.live/post/1 會發現頁面顯示To Many Attempts

訪問限制源碼解讀

觀察 app/Http/Kernal.php文件

按圖索驥觀察 vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php文件

這裏的key是根據客戶端請求的ip,方式,域名等信息加密後造成一個惟一值

兩分鐘實現註冊登陸

只要簡單的執行 php artisan make:auth 便可,若是以前沒有migrate 數據庫,須要先migrate一下

 

而後你會發現resources/views文件夾下生成了一些試圖文件夾和文件

同時在app/Http/Controllers文件夾下頁生成了一些文件包和文件

觀察代碼 app/Http/Controllers/HomeController.php  

紅色區域的代碼代表 home路徑下的頁面須要登陸才能訪問

在瀏覽器中瀏覽頁面https://10yue.live/home 會看到頁面跳轉到登陸頁面 

進入註冊頁面 https://10yue.live/register 註冊一個帳戶嘗試登陸看看

登陸後的樣子

嘗試使用忘記密碼功能發送郵件,根據上一節課的配置 ,郵件將發送到mailtrap.io帳號裏

登陸mailtrap.io看看 果真發現了郵件

點擊重置密碼按鈕 嘗試一下修改密碼

這時候若是嘗試將郵件發送到log中,只要修改一下.env配置 將MAIL_DRIVER改成log 

重啓服務器 再次發送忘記密碼請求

則能夠在/storage/logs/larave.log  網站日誌中看到郵件內容 (固然日誌文件中還記錄的全部的其餘的日誌內容)

laravel還自帶了用戶訪問限制功能,若是一個用戶連續錯密碼超過5次,系統將暫時拒絕該用戶登陸

最後 咱們輸入php artisan route:list命令 會看到系統自動生成了一些路由

而後查看代碼auth的路由定義代碼  vendor/laravel/framework/src/Illuminate//Routing/Router.php

全局變量errors

在首頁試圖 resources/views/welcome.blade.php文件中添加代碼 {{dd($errors)}} 能夠經過變量$errors獲取全局的錯誤信息

多表認證登陸

執行下面的命令生成admin表

php artisan make:migration create_admin_table --create=admin

修改admin表的migration文件  database/migrations/2016_12_01_061057_create_admin_table.php

添加以下字段

執行生成表命令 

php artisan migrate

複製Http/Controllers/Auth文件夾 重命名爲AdminAuth

修改Http/Controllers/AdminAuth下的全部文件的命名空間爲

namespace App\Http\Controllers\AdminAuth;

修改Http/Controllers/AdminAuth/LoginController.php文件的redirectto屬性爲 /admin 

增長屬性guard 值爲admin

protected $redirectTo = '/admin';
  protected $guard='admin';   //與表名一致

且刪除紅框部分的代碼

添加兩個新方法 

public function showLoginForm(){
      return view('admin.auth.login');
    }

 

用一樣的方式修改 Http/Controllers/AdminAuth/RegisterController.php

namespace App\Http\Controllers\AdminAuth;

use App\Admin;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/admin';
    protected $guard='admin';   //與表名一致

    public function showRegistrationForm(){
      return view('admin.auth.register');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return Admin::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

 

在resources/views文件夾下建立admin文件夾 ,將resources/views/auth複製一份到resources/views/admin文件夾 ,修改一些明顯的連接地址

 

在routes/web.php中添加路由

Route::get('/admin/login',  'AdminAuth\LoginController@showLoginForm');
Route::post('/admin/login','AdminAuth\LoginController@login');
Route::get('/admin/logout',  'AdminAuth\LoginController@logout');

Route::get('admin/register', 'AdminAuth\RegisterController@showRegistrationForm');
Route::post('admin/register','AdminAuth\RegisterController@register');

Route::get('/admin','AdminController@index');

經過命令生成AdminCntroller文件

php artisan make:controller AdminController

爲app/Http/Controller/AdminController.php文件添加一個簡單的index方法

public function index(){
      return 'admin page';
    }

用命令生成Admin的model文件

php artisan make:model Admin

編輯這個model文件 app/Admin.php 

修改config/auth.php 文件 ,添加紅框中的代碼

 

用命令爲admin生成一個middleware 

php artisan make:middleware RedirectIfNotAdmin

修改這個新生成的middleware文件 app/Http/Middleware/RedirectIfNotAdmin.php

修改app/Http/Kernel.php文件

而後就能夠在app/Http/Controller/AdminController.php文件中使用這個middleware了

 

隊列

先設置隊列的驅動 修改配置文件.env 

執行命令 建立隊列表

php artisan queue:table
php artisan migrate

執行命令 建立一個job

php artisan make:job SendReminderEmail

在app/Jobs文件夾下會生成一個 SendReminderEmail.php文件

修改app/Jobs/SendReminderEmail.php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendReminderEmail implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;


    public $user;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user=$user;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        \Log::info('send remind email to'.$this->user->email);
    }
}

新增一個controller 

php artisan make:controller UsersController

爲app/Http/Controllers/UsersController.php 添加store方法

public function store(){
      $users=\App\User::where('id','>',5)->get();

      foreach($users as $user){
        $this->dispatch(new \App\Jobs\SendReminderEmail($user));
      }

      return 'Done';
    }

在routes/web.php 添加路由

Route::get('job','UsersController@store');

在瀏覽器中執行 https://10yue.live/job

而後數據庫生成了對應的任務列表

執行命令 php artisan queue:work 就能夠執行隊列中的任務

任務執行後會在日誌文件storage/logs/laravel.log中留下記錄 

 

使用 Beanstalkd 實現隊列

先要在服務器上安裝beanstalkd 執行命令

相關文章
相關標籤/搜索