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了解细节。

现在我们已经有所有路由和视图设置,你应用应该是看上去像这样:

laravel

还有登录页面和注册页面。

运行迁移

迁移类似你数据库的版本控制,能够让开发团队方便修改和分享数据库结构,这些放在目录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

学习教程专题