Laravel入门教程
本入门教程以基于Laravel框架开发一个MVC应用为例,包括授权安全机制,通过这样的实战源码案例为大家学习提供帮助。
Laravel是一个免费开源的伟大的PHP框架,专门用于开发Web应用,Laravel包含了很多特性:
- 数据库迁移
- Eloquent ORM
- 授权和策略
- 调度
- 队列
Laravel使用 Composer 来管理器依赖,在使用Laravel之前确认你已经安装了Composer,然后我们可以通过Composer的create-project命令安装Laravel:
composer create-project --prefer-dist laravel/laravel GOT
当然你也可以直接使用Laravel安装器。
Laravel应用遵循MVC(模型-视图-控制器)模式:
- Model 模型:查询你的数据库并返回必要的数据
- Views 视图:是将数据渲染输出的页面
- Controller 控制器:处理用户请求,从模型获得数据,传输模型到视图。
Laravel的应用目录说明如下:
- Console -包含你的技术命令
- Http - 包含控制器 中间件 请求和路由文件
- Providers - 包含所有应用服务提供者:Service Providers
- Events - 包含所有事件
- Exceptions - 抛错exception处理器
- Jobs - 队列中的任务工作
- Listeners - 事件监听者处理类
- Policies - 包含授权策略,用于决定一个用户能否有权基于一个资源执行相应动作。
其他目录还有:
- boostrap:包含框架自动加载文件和产生缓存文件。
- config :包含你的应用配置文件
- database: 包含你的数据库迁移和源数据
- public:包含所有图片, JavaScript, css 等.
- resources 包含视图和本地化文件
- storage 包含编译后模板 文件缓存和日志
- tests 包含所有测试
- vendor 包含所有依赖
设置控制器
打开终端运行下面命令设置控制器ListController:
php artisan make:controller ListController
然后打开这个app/Http/Controllers/ListController.php 文件,配置如下:
namespace App\Http\Controllers;
class ListController extends Controller
{ public function show() { $characters = [ 'Daenerys Targaryen' => 'Emilia Clarke', 'Jon Snow' => 'Kit Harington', 'Arya Stark' => 'Maisie Williams', 'Melisandre' => 'Carice van Houten', 'Khal Drogo' => 'Jason Momoa', 'Tyrion Lannister' => 'Peter Dinklage', 'Ramsay Bolton' => 'Iwan Rheon', 'Petyr Baelish' => 'Aidan Gillen', 'Brienne of Tarth' => 'Gwendoline Christie', 'Lord Varys' => 'Conleth Hill' ]; return view('welcome')->withCharacters($characters); } }
view('welcome')->withCharacters($characters)表示我们传输$characters数组给视图welcome.blade.php,后面我们来创建这个视图。
设置模型
Laravel 模型缺省存储在app目录根目录,User模型是和Laravel框架一起的,因此,这里我们不需要创建User模型,如果你要创建更多模型使用下面命令:
php artisan make:model <modelName>
设置路由
打开app/Http/routes.php,配置如下:
/* |-------------------------------------------------------------------------- | Application Routes |-------------------------------------------------------------------------- | | Here is where you can register all of the routes for an application. | It's a breeze. Simply tell Laravel the URIs it should respond to | and give it the controller to call when that URI is requested. | */
Route::get('/', 'ListController@show');
一旦请求访问“/”路由,它会调用ListController 的show方法,在视图welcome中渲染返回值,我们会稍后配置welcome视图
设置授权
Laravel授权机制是out of box的,你只需要配置到,运行下面命令:
php artisan make:auth
正如你看到,一些文件会被复制到我们应用,路由会被更新,路由文件已经带有如下附加信息:
Route::auth()是一个封装了所有登录和注册路由的方法。
现在需要授权视图了,在 resources/views/auth目录下,基本布局已经存在于resources/views/layouts 目录,所有视图都是使用Bootstrap CSS框架,你可以自己优化定制。
打开welcome.blade.php配置如下:
@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-10 col-md-offset-1"> <div class="panel panel-success"> <div class="panel-heading">List of Game of Thrones Characters</div> @if(Auth::check()) <!-- Table --> <table class="table"> <tr> <th>Character</th> <th>Real Name</th> </tr> @foreach($characters as $key => $value) <tr> <td></td><td></td> </tr> @endforeach </table> @endif </div> @if(Auth::guest()) <a href="/login" class="btn btn-info"> You need to login to see the list>></a> @endif </div> </div> </div> @endsection
Auth::check() 能检查一个用户是否被授权,这是通过Auth这个管理类实现,如果用户登录后它返回真,如果用户没有登录,返回false,看 here 了解其总管职责细节。
Auth::guest() 是Auth::check()反面,如果用户没有登录成功返回真,如果登录成功返回假,看 here了解细节。
现在我们已经有所有路由和视图设置,你应用应该是看上去像这样:
还有登录页面和注册页面。
运行迁移
迁移类似你数据库的版本控制,能够让开发团队方便修改和分享数据库结构,这些放在目录database/migrations,每个迁移文件名包含时间戳是让框架决定迁移的顺序。
user用户迁移文件Laravel框架已经默认安装了,检查database/migrations目录确保你至少有两个迁移文件xxx_create_users_table.php 和xxx_create_password_resets_table.php,其中xxx代表是时间戳。
运行下面命令:
php artisan migrate
运行这个命令和,users 和 password_resets两个表会被创建,确保相应数据库名称以及在你的.env文件配置,值应该被分配到DB_DATABASE 常量。
路径定制
打开文件app/Http/Controllers/Auth/AuthController.php,有一个 $redirectTo变量配置为:
/** * Where to redirect users after login / registration. * * @var string */ protected $redirectTo = '/';
它能被配置你需要的任何路由,这是用户注册或登录后重定向的页面,在我们案例中,用户应该被重定向到landing入口页面,这样就不需要改变。
现在注册成功后的页面有了。
使用授权中间件
中间件提供一个方便的过滤机制,能够过滤HTTP请求,Laravel包括一个中间件能验证用户是否被验证通过,如果用户没有验证通过,中间件会重定向用户到登录页面,如果用户被验证通过,中间件会让请求继续其原来路径,app/Http/Middleware 目录包含了几个这样的中间件。
让我们看看auth中间件是如何工作的,增加新的路由到routes.php文件中:
Route::get('/got', [ 'middleware' => ['auth'], 'uses' => function () { echo "You are allowed to view this page!"; }]);
现在登录退出,试图访问这个路由,你会被重定向到/login路由,这是因为Laravelauth中间件会拦截请求,检查用户是否登录,如果没有,会重定向到登录页面。
Auth0 是使用 JSON Web Tokens实现的用户登录,那意味着你有坚固的身份基础平台,包括单点登录,用户管理 ,支持Facebook 等社会媒体,也支持企业身份产品如Active Directory, LDAP, SAML。使用Lock Widget能够在Laravel中方便设置Auth0 。
源码下载: repo