这里有新鲜出炉的 Laravel 5 教程,程序狗速度看过来!
Laravel 是一套简洁、优雅的 PHP Web 开发框架 (PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络 APP,而且每行代码都可以简洁、富于表达力。
这篇文章主要介绍了 Laravel 搭建后台登录系统的方法, 结合实例形式详细分析了 Laravel 搭建后台登录系统所涉及的安装、配置、数据库操作等具体步骤与实现方法, 需要的朋友可以参考下
本文实例讲述了 Laravel 搭建后台登录系统的方法。分享给大家供大家参考,具体如下:
今天想用 laravel 搭建一个后台系统,就需要最简单的那种,有用户登录系统,试用了下,觉得 laravel 的用户登录这块做的还真 happy。当然,前提就是,你要的用户管理系统是最简单的那种,就是没有用户权限,能登录就好。
我这里就不用默认的 user 表做例子了,那样很容易和 laravel 的一些默认设置混淆。
首先确认,后台的用户表,我设计表叫做 badmin,每个管理员有用户名(username),有昵称(nickname),有邮箱(email),有密码(password)
这里玩个花,使用 laravel 的 migration 来建立表(实际上可以用不着使用这个工具建立表)
1 安装好最基本的 laravel 框架
2 创建 migration 文件:
./artisan migrate:make create-badmin-table
3 发现 app/database/migration / 下面多了一个 php 文件:
2014_10_19_090336_create-badmin-table.php
4 往 up 和 down 里面增加内容;
- <?php
- use Illuminate\Database\Schema\Blueprint;
- use Illuminate\Database\Migrations\Migration;
- class CreateBadminTable extends Migration {
- /**
- * Run the migrations.
- *
- * @return void
- */
- public function up()
- {
- Schema::create('badmin', function($table)
- {
- $table->increments('id');
- $table->string('nickname', 100)->unique();
- $table->string('username', 100)->unique();
- $table->string('email', 100)->unique();
- $table->string('password', 64);
- $table->timestamps();
- });
- }
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Schema::drop('badmin');
- }
- }
5 配置好 local 的 database,app/config/local/database.php
- <?php
- return array(
- 'fetch' => PDO::FETCH_CLASS,
- 'default' => 'mysql',
- 'connections' => array(
- 'mysql' => array(
- 'driver' => 'mysql',
- 'host' => 'localhost',
- 'database' => 'test',
- 'username' => 'yejianfeng',
- 'password' => '123456',
- 'charset' => 'utf8',
- 'collation' => 'utf8_unicode_ci',
- 'prefix' => '',
- ),
- ),
- 'migrations' => 'migrations',
- );
6 创建数据表:
./artisan migrate --env=local
这个时候去数据库看,就发现多了一张 badmin 表,数据结构如下:
- CREATE TABLE `badmin` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `nickname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
- `username` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
- `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
- `password` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
- `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- PRIMARY KEY (`id`),
- UNIQUE KEY `badmin_nickname_unique` (`nickname`),
- UNIQUE KEY `badmin_username_unique` (`username`),
- UNIQUE KEY `badmin_email_unique` (`email`)
- ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
要问这里为什么多出了 create_at 和 update_at,这是 laravel 默认为每个表创建的字段,而且在使用 Eloquent 进行增删改查的时候能自动更新这两个字段
7 创建个 Model:
- <?php
- use Illuminate\Auth\UserTrait;
- use Illuminate\Auth\UserInterface;
- use Illuminate\Auth\Reminders\RemindableTrait;
- use Illuminate\Auth\Reminders\RemindableInterface;
- class Badmin extends Eloquent implements UserInterface, RemindableInterface {
- use UserTrait, RemindableTrait;
- protected $table = 'badmin';
- protected $hidden = array('password');
- public static $rules = [
- 'nickname' => 'required|alpha_num|min:2',
- 'username' => 'required',
- 'email'=>'required|email|unique:badmin',
- 'password'=>'required|alpha_num|between:6,12|confirmed',
- ];
- }
这里必须要 implements UserInterface 和 RemindableInterface
8 把 model 和 Auth 关联上,修改 app/config/auth.php
- <?php
- return array(
- // 默认的用户验证驱动
- // 可以是database或者eloquent
- 'driver' => 'eloquent',
- // 只有驱动为eloquent的时候才有用
- 'model' => 'Badmin',
- );
这里的 driver 可以是 eloquent 或者 database,使用 eloquent 就告诉 Auth 组件说,用户认证类是 Badmin 这个类管的。这里的 model 是有命名空间的,就是说如果你的 admin 类是 \ Yejianfeng\Badmin,这里就应该改成'\Yejianfeng\Badmin'
9 好了,这个时间其实逻辑部分已经搭建完毕了,你已经可以在 controller 种使用
Auth::attempt(XXX) 做权限认证
Auth::user() 获取登录用户(一个 Badmin 类)
等。
10 下面要建立一个用户登录页面:
11 设置路由:
- <?php
- // 不需要登录验证的接口
- Route::get('/', ['as' => 'user.login','uses'=>'UserController@getLogin']);
- Route::get('user/login', ['as' => 'login', 'uses' => 'UserController@getLogin']);
- Route::post('user/login', ['as' => 'login', 'uses' => 'UserController@postLogin']);
- // 需要登录验证才能操作的接口
- Route::group(array('before' => 'auth'), function()
- {
- Route::get('user/logout', ['as' => 'logout', 'uses' => 'UserController@getLogout']);
- Route::get('user/dashboard', ['as' => 'dashboard', 'uses' => 'UserController@getDashboard']);
- });
12 设置 controller:
- <?php
- class UserController extends BaseController {
- // 登录页面
- public function getLogin()
- {
- return View::make('user.login');
- }
- // 登录操作
- public function postLogin()
- {
- if (Auth::attempt(array('email'=>Input::get('email'), 'password'=>Input::get('password')))) {
- return Redirect::to('user/dashboard')
- ->with('message', '成功登录');
- } else {
- return Redirect::to('user/login')
- ->with('message', '用户名密码不正确')
- ->withInput();
- }
- }
- // 登出
- public function getLogout()
- {
- Auth::logout();
- return Redirect::to('user/login');
- }
- public function getDashboard()
- {
- return View::make('user.dashboard');
- }
- // 添加新用户操作
- public function getCreate()
- {
- return View::make('user.create');
- }
- // 添加新用户操作
- public function postCreate()
- {
- $validator = Validator::make(Input::all(), User::$rules);
- if ($validator->passes()){
- $bAdmin = new Badmin();
- $bAdmin->nickname = Input::get('nickname');
- $bAdmin->username = Input::get('username');
- $bAdmin->email = Input::get('email');
- $user->password = Hash::make(Input::get('password'));
- $user->save();
- Response::json(null);
- } else {
- Response::json(['message' => '注册失败'], 410);
- }
- }
- }
13 设置下 filter,app/filter.php
- Route::filter('auth', function()
- {
- if (Auth::guest())
- {
- if (Request::ajax())
- {
- return Response::make('Unauthorized', 401);
- }
- else
- {
- return Redirect::guest('/');
- }
- }
- });
将这里认证失败后的地址转到 / 路径
14 设置 views/user/login.blade.php
这里截取一部分:
可以看出,这里可以直接使用 Session::has 和 Session::get
然后基本就完成了...
后记
laravel 这里的 auth 机制还是很方便的,但是 migration 使用起来总觉得有点憋屈。操作数据库总是隔着一层,不爽。
这里的 auth 一些简单的用户登录机制已经可以了,但是如果要做更复杂的用户管理权限,估计要使用 Sentry(https://cartalyst.com/manual/sentry)这样的第三方组件了。
希望本文所述对大家基于 Laravel 框架的 PHP 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0826/343175.html