以上就是给各位分享详解Laravel注册重构,其中也会对laravel登录注册进行解释,同时本文还将给你拓展Laravel(1)注册重写、laravel注册api编写、laravel注册成功不跳转首页
以上就是给各位分享详解Laravel注册重构,其中也会对laravel登录注册进行解释,同时本文还将给你拓展Laravel(1) 注册重写、laravel注册api编写、laravel注册成功不跳转首页、laravel注册错误处理等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:详解Laravel注册重构(laravel登录注册)
下面由Laravel框架教程栏目给大家介绍Laravel注册重构,希望对需要的朋友有所帮助!
需要使用laravel搭建一个后台内容管理系统,但是laravel默认的登陆注册不能满足目前的需求
注册的话因为是用在后台,并且不需要使用邮箱注册的,而且会有一些额外的配置需要在注册时一起填写。
1. 首先确定用户注册的路由
我们在安装好laravel的时候默认生成的注册是用邮箱进行注册的,并且有些选项不需要,有些还需要加一些表单选项
我们注册的话,并不是可以随便注册的,只有一些超级管理员才能进行注册
首先我们使用上次创建的UserController
进行配置,如果没有的话,可以使用PHP artisan make:controller UserController
创建一个控制器类
然后创建两条路由Route::get('register', 'UserController@getRegister')
和Route::post('register', 'UserController@postRegister')
前者是显示一个注册的页面get请求,后面是注册账号的post请求。
2. 显示注册账号页面
这个使用的是getRegister
这个方法,这个方法只需要显示一个视图所以并没有特别的逻辑
public function getRegister() { return view('auth.register'); }
3. 请求注册账号
这个使用的是postRegister
这个方法
注册账号的话和重置密码一样,而且比注册账号还要简单点。
我们在往数据库里插入一条用户纪录的时候,可以使用User::create($data)
进行插入。$data
是个数组,里面存放了每个字段的键和值
public function postRegister(Request $request) { $rules = [ 'username'=>'required|unique:finance_enewsuser', 'password' => 'required|between:6,20|confirmed' ]; $messages = [ 'required'=>':attribute不能为空', 'unique'=>'用户名已被注册', 'between' => '密码必须是6~20位之间', 'confirmed' => '新密码和确认密码不匹配' ]; $username = $request->input('username'); $password = $request->input('password'); $group = $request->input('group'); $data = $request->all(); $validator = Validator::make($data, $rules, $messages); if ($validator->fails()) { return back()->withErrors($validator); } $data = [ 'username' => $username, 'password' => bcrypt($password), 'groupid' => $group, 'checked' => 0, 'styleid' => 1, 'filelevel' => 0, 'loginnum' => 0, 'lasttime' => time(), 'lastip' => '127.0.0.1', 'truename' => '', 'email' => '', 'pretime' => time(), 'preip' => '127.0.0.1', ]; User::create($data); //插入一条新纪录,并返回保存后的模型实例 //如果注册后还想立即登录的话,可以使用$user = User::create($data); Auth::login($user); 进行认证 return redirect('/'); }
4. 完成后的示例
UserController
public function getRegister() { return view('auth.register'); } public function postRegister(Request $request) { $rules = [ 'username'=>'required|unique:finance_enewsuser', 'password' => 'required|between:6,20|confirmed' ]; $messages = [ 'required'=>':attribute不能为空', 'unique'=>'用户名已被注册', 'between' => '密码必须是6~20位之间', 'confirmed' => '新密码和确认密码不匹配' ]; $username = $request->input('username'); $password = $request->input('password'); $group = $request->input('group'); $data = $request->all(); $validator = Validator::make($data, $rules, $messages); if ($validator->fails()) { return back()->withErrors($validator); } $data = [ 'username' => $username, 'password' => bcrypt($password), 'groupid' => $group, 'checked' => 0, 'styleid' => 1, 'filelevel' => 0, 'loginnum' => 0, 'lasttime' => time(), 'lastip' => '127.0.0.1', 'truename' => '', 'email' => '', 'pretime' => time(), 'preip' => '127.0.0.1', ]; User::create($data); //插入一条新纪录,并返回保存后的模型实例 return redirect('/'); }
register.blade
<form class=login-form action={{ url('/register') }} method=post> {!! csrf_field() !!} <h3 class=font-green>Sign Up</h3> @if(count($errors) > 0) <p class=alert alert-danger display-hide style=display: block;> <button class=close data-close=alert></button> <span> {{ $errors->first() }} </span> </p> @endif <p class=form-group> <label class=control-label visible-ie8 visible-ie9>用户名</label> <input class=form-control placeholder-no-fix type=text autocomplete=off placeholder=Username name=username> </p> <p class=form-group> <label class=control-label visible-ie8 visible-ie9>密码</label> <input class=form-control placeholder-no-fix type=password autocomplete=off id=register_password placeholder=Password name=password> </p> <p class=form-group> <label class=control-label visible-ie8 visible-ie9>重复密码</label> <input class=form-control placeholder-no-fix type=password autocomplete=off placeholder=Repeat password name=password_confirmation> </p> <p class=form-group> <label class=control-label visible-ie8 visible-ie9>用户组</label> <select name=group class=form-control> <option value=1> 超级管理员 </option> <option value=2> 管理员 </option> <option value=3> 编辑 </option> </select> </p> <p class=form-actions> <button type=submit id=register-submit-btn class=btn btn-success uppercase pull-right>注册</button> </p> </form>
5. 中间件--用户必须登录
现在注册都完成了,我们就差用户的判断了。
需求注册账号必须只能是有超级管理员权限的账号才可以注册。
这种情况下按照我们一般的步骤就是在postRegister
方法里直接查出用户的信息,然后查看用户是否满足这个权限,不满足的情况下就跳转到其它页面。
这种方法可以,但是,我们既然有超级管理员和管理员这些权限区分,肯定不止一个地方使用,其它地方也会用到。
然后会有人想到在model里写个方法,以后有需要都可以直接调用。
这个方法也可以,不过,我们推荐使用laravel提供的中间件这个功能,这个功能非常强大,也非常好用。现在我们就使用中间件这个功能。
因为我们是后台内容管理系统,所以,我们首先创建一个中间件,功能是,所有页面进入前,必须是登录状态,否则跳到登录页。
查看手册发现可以使用PHP artisan make:middleware CheckLoginMiddleware
命令创建一个中间件,当然复制一个差不多的文件,改下也是一样的。
然后会在app/Http/Middleware/
目录下创建了一个CheckLoginMiddleware
中间件文件,里面只有一个handle()
方法,我们直接在里面增加我们的功能
<?PHP namespace App\Http\Middleware; use Closure; use Auth; class CheckLoginMiddleware { public function handle($request, Closure $next) { //使用Auth方法,需要引入use Auth;方法 //$request->is('login')表示请求的URL是否是登录页 //因为我们打算使用全局的,所以,需要把登录页排除,不然会无限重定向 //如果你的登录页不是/login,而是/auth/login的话,就写$request->is('auth/login') //并且我们要在请求处理后执行其任务,因为我们需要获取到用户的登录信息 $response = $next($request); if (!Auth::check() && !$request->is('login')) { return redirect('/login'); } return $response; } }
这个中间件的功能是,如果有路由产生,首先使用Auth::check()
判断用户是否登录,如果没有登录的跳转到登录页。
方法写好了,但是还不能使用,我们需要注册下这个中间件,告诉框架我们这个中间件写好了,可以使用了,使用的范围是哪里。
在app/Http/
目录下有个Kernel.PHP
文件是注册这个中间件的,也就是告诉框架,我们写好了这个中间件。
而Kernel.PHP
文件里有两个数组属性,一个$middleware
表示全局使用,一个$routeMiddleware
表示可以选择使用。
全局使用的意思是,不管你请求哪个页面,都会先执行这个中间件。
选择使用表示,需要哪个HTTP请求,要求执行中间件,就在哪个地方执行。
这里每个页面都要求必须登录的话,可定是注册一个全局的,在$middleware
数组属性里加入一条
\App\Http\Middleware\CheckLoginMiddleware::class
注册下,就可以使用了
PS:请记住,如果定义全局的要格外小心,比如上面我们要排除登录页,不然因为用户没有登录,所以在哪个页面都会重定向到登录页,当然也包括登陆页
5. 中间件--特殊页面需要验证用户组
现在是进行用户权限页面的限制,同样我们也要重新创建一个中间件
使用PHP artisan make:middleware CheckGroupMiddleware
创建一个新的中间件,用来判断这个用户是否满足这个权限
<?PHP namespace App\Http\Middleware; use Closure; use Auth; class CheckGroupMiddleware { public function handle($request, Closure $next) { $user = Auth::user(); if ($user->groupid != 1) { return redirect('/'); } return $next($request); } }
这里我们还是通过Auth::user()
来获取到用户的信息,然后判断用户的组,不属于超级管理员就跳到首页。
然后我们在到app/Http/
目录下有个Kernel.PHP
文件是注册这个中间件的,这次我们注册为可以选择的中间件。
这个中间件因为是可以选择的,所以我们还需要给它起个别名,在$routeMiddleware
数组属性里加如一条
'user.group' => \App\Http\Middleware\CheckGroupMiddleware::class
创建一个可以使用usergroup
这个名字使用的中间件。
创建好后,我们可以选择在哪里使用,一个是在router.PHP
的路由文件里加入,一个是在controller里使用
在router.PHP
文件里使用
Route::get('/', ['middleware' => ['user.group'], function () { // }]);
在控制器内使用
$this->middleware('user.group');
这里我们选择在路由里添加中间件。让注册页面只能是超级管理员才可以注册
Route::get('register', 'UserController@getRegister')->middleware('user.group'); Route::post('register', 'UserController@postRegister')->middleware('user.group');
我们目前只有两个路由要判断权限,所以使用了链式的写法,当然你也可以按照手册里上使用组的方式,组的方式更为优雅。
当然如果你的整个控制器内的方法都需要中间件进行验证过滤的话,你也可以创建组的形式,也可以直接在控制器内使用
__construct
方法,让每次请求这个控制器时,先执行中间件
class MyController extends Controller { public function __construct() { $this->middleware('user.group'); } public function index() { return view('my.index'); } }
Laravel(1) 注册重写
配置路由
php
<?php Route::controllers([ ''auth'' => ''Auth\AuthController'', ]);
这种路由配置方式对应的路径方式是 访问的方式+方法名 如在浏览器中使用get方式去访问register方法 那么这个路由会自动配置到这个类下面的getRegister方法。post也是一样
建立一个自己的注册页面
我在AuthControlle里建立一个自己的视图
php
<?php public function getRegister(){ return view("auth.register"); }
上面已经说了路由的解析方式 只要配好路由就可以了
我们需要定义一个处理这个的注册处理类
接下来我会把所有的代码贴出来再代码中去讲解怎么重写 同样这个文件位于AuthController下
php
<?php public function postRegister(UserRegisterRequest $req){ //验证通过 注册用户 $data = $req->all(); $data[''register_ip''] = $req->ip(); $user = $this->registrar->create($data); return redirect()->intended(''/''); } ?>
大家会发现整个注册功能非常简单 那么具体可以在哪里做了注册的限制呢
其实是在UserRegisterRequest这个文件里去对所有填写的表单数据进行了控制
php
<?php namespace App\Http\Requests; use App\Http\Requests\Request; use Config; class UserRegisterRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { //自定义的电话号码正则表达式 $regex = Config::get(''constant.phone_number_regex''); return [ //对注册表单提交的信息进行验证 "username" => [''required'',''min:3'',''max:16'',''unique:users''], "phone_number" => [''required'',''min:3'',''max:16'',''unique:users''], "password" => [''required'',''min:6'',''max:16'',''confirmed''], "verify_code" => [''required'',''digits:4''], ]; } public function sanitize() { return $this->all(); } }
我们可以通过laravel自带的php artisan make:request 创建一个请求类
这个类可以对所有请求的数据进行控制,在rule里面定义好规则就可以控制请求的的数据,如果符合规则那么会继续访问。
改写注册添加数据操作
注册的目的就是为了将符合条件的数据写入用户表中 既然改写了请求的数据 那么自然也要改写请求的操作
注册成功后添加到用户数据库中 是在上面的 postRegister中的这一段代码来实现的
php
<?php $user = $this->registrar->create($data);
找到这段代码 这段代码位于 services下的Registrar.php下
php
<?php public function create(array $data) { $properties = [ ''username'' => $data[''username''], ''password'' => bcrypt($data[''password'']), ''register_time'' => Carbon::now()->toDateTimeString(), ''register_ip'' => $data[''register_ip''] ]; return User::create($properties); $user = new User(); $user->save(); }
将这个处理函数改成符合自己业务逻辑的函数就行了
Laravel 一步步实现权限控制(2) 登录重写
laravel注册api编写
本文目录
- 一、注册api
- 1.1 创建注册路由
- 1.2 创建注册控制器
- 1.3 创建表单验证类
- 1.4 测试
- 1.4.1 配置语言包
- 1、默认效果
- 2、自定义提示消息
- 1.4.2 更改时区
一、注册api
1.1 创建注册路由
注册路由我们把它归属到认证模块去,在routes/auth.PHP
下去写:
<?PHP
use App\Http\Controllers\Auth\RegisterController;
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
// 路由组
$api->group(['prefix' => 'auth'], function ($api) {
// 注册
$api->post('register', [RegisterController::class, 'store']);
});
});
1.2 创建注册控制器
运行命令PHP artisan make:controller Auth/RegisterController
,创建注册控制器。
1.3 创建表单验证类
运行命令PHP artisan make:request Auth/RegisterRequest
Http
文件夹下就多了Requests
文件夹以及验证文件。效仿基础控制器,我们再建一个基础验证类。
运行命令:
PHP artisan make:request BaseRequest
修改BaseRequest.PHP
为如下:
<?PHP
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class BaseRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
}
然后RegisterRequest.PHP
继承BaseRequest
类,并写入规则:
<?PHP
<?PHP
namespace App\Http\Requests\Auth;
use App\Http\Requests\BaseRequest;
use Illuminate\Foundation\Http\FormRequest;
class RegisterRequest extends BaseRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|max:16',
'email' => 'required|email|unique:users',
'password' => 'required|min:6|max:16|confirmed',
];
}
}
unique:users
-> 邮箱在users
表中唯一。
confirmed
-> 表示必须要传一个password_confirmation
确认密码字段并且和password
字段值相等。
然后注册控制器不使用原始的request
,而使用我们自己写的:
<?PHP
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Auth\RegisterRequest;
use App\Models\User;
use Illuminate\Http\Request;
class RegisterController extends BaseController
{
/**
* 用户注册
*/
public function store(RegisterRequest $request) {
$user = new User();
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->password = bcrypt($request->input('password'));
$user->save();
return $this -> response -> created();
}
}
1.4 测试
测试:
1.4.1 配置语言包
可以看到我们的验证提示都是英文的,我们可以去下载中文包去配置。
laravel配置语言包请查看这篇文章
1、默认效果
配置完中文语言包的效果:
2、自定义提示消息
如果说我们不想要它默认的,想要自定义的,我们可以在RegisterRequest.PHP
这样写(其他类似):
public function messages() {
return [
'email.unique' => '邮箱已经存在,你还想注册?怎么不上天呢?'
];
}
效果:
1.4.2 更改时区
在config/app.PHP
修改:
'timezone' => 'Asia/Shanghai'
:
在学习的PHP的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。
laravel注册成功不跳转首页
先来解释一下什么是 laravel。
Laravel 是一个开源的 PHP Web 应用程序框架,用于快速开发 Web 应用程序。它采用 Model-View-Controller(MVC)架构模式,具有优雅的语法和强大的功能,能够帮助开发者构建现代化、可维护的 Web 应用程序。
现在,让我们来看一下有关 Laravel 注册成功不跳转首页的问题。
问题的简述
在使用 Laravel 开发 Web 应用程序的过程中,我们经常会遇到将用户注册成功后自动跳转到首页的需求。然而,有时候我们会发现,尽管用户已经成功注册,但是仍然停留在注册页面,无法自动跳转到首页。
问题的原因
这个问题的出现可能是由不同的因素引起的。下面是一些可能导致该问题的原因:
- 控制器代码问题
在 Laravel 中,我们通常通过编写控制器来处理用户提交的注册请求。如果控制器代码存在问题,可能会导致注册成功后无法跳转到首页。
- 路由问题
Laravel 中的路由控制着应用程序中的 URL。如果路由未正确配置,或者出现其他与路由相关的问题,可能会导致注册成功后无法跳转到首页。
- 页面跳转的代码问题
在 Laravel 中,我们可以使用重定向(Redirect)来跳转到其他页面。如果有问题,可能会导致注册成功后无法跳转到首页。
解决方案
针对不同的原因,我们需要采取不同的解决方案。下面是解决这个问题的一些可能方案:
- 检查控制器代码
请检查控制器代码,确保代码正确处理用户提交的注册请求。如果存在问题,请进行必要的修正。
- 检查路由配置
请检查路由配置,确保路由正确处理注册请求并将用户重定向到首页。如果路由存在问题,请进行必要的修正。
- 修改页面跳转的代码
请检查跳转代码,确保代码正确将用户重定向到首页。如果有问题,请进行必要的修正。
- 清除缓存
有时候,注册成功不跳转首页的问题可能是由于缓存导致的。在这种情况下,可以尝试清除缓存以解决问题。
结论
注册成功不跳转首页是一个常见的 Laravel 问题,但是也很容易解决。我们需要仔细检查代码、路由和页面跳转代码,以确保所有部分都正确处理用户注册请求和页面跳转。同时,我们还需要记得清除缓存以确保应用程序正常运行。通过细心的调试和修正,我们可以轻松地解决这个问题,让应用程序顺畅运行。
以上就是laravel注册成功不跳转首页的详细内容,更多请关注php中文网其它相关文章!
laravel注册错误处理
最近在使用 laravel 框架进行开发时,遇到了一些关于注册表单的错误处理问题。在本文中,我将分享我如何使用 laravel 的表单验证和错误处理功能来解决这些错误,以帮助其他开发者更好地处理注册表单的错误。
首先,我们需要了解 Laravel 中的表单验证和错误处理机制。在 Laravel 中,我们可以使用 Validator 类来验证表单数据。验证器可以验证输入数据是否满足规定的条件,如必填字段、邮箱格式、密码长度等等。如果输入数据不满足规定的条件,则验证器会返回一个错误数组。我们可以使用 withErrors() 方法将错误信息存储到 Session 中,然后在视图中显示错误信息。接下来,让我们看看如何在 Laravel 中实现这个功能。
首先,我们需要在注册控制器中创建一个验证器。我们可以使用 Artisan 命令 make:validator 来创建验证器。例如:
php artisan make:validator RegisterValidator
这会在 app/Validators 目录下创建一个名为 RegisterValidator 的验证器。然后我们需要设置验证规则和错误信息。打开 RegisterValidator 类,添加以下代码:
<?php namespace AppValidators; use IlluminateValidationValidator; class RegisterValidator extends Validator { protected $messages = [ ''name.required'' => ''请输入用户名。'', ''name.max'' => ''用户名不能超过255个字符。'', ''email.required'' => ''请输入邮箱地址。'', ''email.email'' => ''请输入有效的邮箱地址。'', ''email.unique'' => ''该邮箱已经被注册。'', ''password.required'' => ''请输入密码。'', ''password.min'' => ''密码长度不能小于6个字符。'', ''password_confirmation.required'' => ''请输入确认密码。'', ''password_confirmation.same'' => ''两次输入的密码不一致。'', ]; public function validateConfirmPassword($attribute, $value, $parameters) { $other = $this->getValue($parameters[0]); return isset($other) && strcmp($value, $other) === 0; } }
在上面的代码中,我们定义了一些常见的验证规则和错误信息。如果用户没有输入必填项或者输入格式不正确,将会显示相应的错误信息。此外,我们还定义了一个自定义验证规则 validateConfirmPassword 来验证两次输入的密码是否一致。接下来,在注册控制器中添加以下代码:
<?php namespace AppHttpControllers; use AppUser; use IlluminateHttpRequest; use IlluminateSupportFacadesValidator; use AppValidatorsRegisterValidator; class RegisterController extends Controller { public function showRegistrationForm() { return view(''auth.register''); } public function register(Request $request) { // 验证表单数据 $validator = Validator::make($request->all(), [ ''name'' => ''required|string|max:255'', ''email'' => ''required|string|email|max:255|unique:users'', ''password'' => ''required|string|min:6|confirmed'', ]); // 使用自定义的 validator 类的规则验证数据 $validator->setValidator(new RegisterValidator($validator->getTranslator())); if ($validator->fails()) { return redirect()->back()->withErrors($validator)->withInput(); } // 创建用户 $user = User::create([ ''name'' => $request->input(''name''), ''email'' => $request->input(''email''), ''password'' => bcrypt($request->input(''password'')), ]); // 登录用户 auth()->login($user); // 跳转到首页 return redirect()->intended(''/''); } }
在上面的代码中,我们使用 Laravel 内置的 Validator 类来验证表单数据。然后我们调用 setValidator() 方法来应用我们创建的自定义 validator 类的规则验证数据。如果有错误,我们将错误信息存储到 Session 中并将用户重定向回表单页面。如果验证通过,我们创建用户并将其登录。最后,我们将用户重定向到主页。
在模板中,我们可以使用以下代码来显示错误信息:
@if ($errors->any()) <div> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
上面的代码将遍历 $errors 变量中的所有错误信息,并将每个错误信息作为一个列表项进行显示。
在这篇文章中,我们学习了如何在 Laravel 中使用表单验证和错误处理功能来处理注册表单的错误。通过使用自定义 validator 类来扩展 Laravel 内置的 validator 功能,我们可以轻松地自定义规则和错误信息,提高代码的可重用性和可维护性。希望这篇文章能够帮助到你更好地处理表单验证和错误处理。
以上就是laravel注册错误处理的详细内容,更多请关注php中文网其它相关文章!
关于详解Laravel注册重构和laravel登录注册的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Laravel(1) 注册重写、laravel注册api编写、laravel注册成功不跳转首页、laravel注册错误处理的相关信息,请在本站寻找。
本文标签: