上一节课咱们学了laravel5.3的新特性 https://my.oschina.net/lilugirl2005/blog/787478php
这节课主要讲一些laravel5.2的新特性在laravel5.3的基础上演示laravel
咱们仍是以10yue.live网站为例 web
实例: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
在首页试图 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 执行命令