Laravel-admin 开发扩展示例
最近用到这个东东,版本如下
-
laravel-admin ^1.5
-
laravel 5.5.*
一、Form组件扩展示例
有时候,Form中的组件不能100%满足需求,需要扩展下,以$form->select()方法为例,可以在app\Admin\Extensions目录下创建Select.php,继承原先Select类,如下。
namespace App\Admin\Extensions;
use Encore\Admin\Admin;
class Select extends \Encore\Admin\Form\Field\Select
然后根据你的需求重写或新增功能,然后在app\Admin\bootstrap.php中加入下面代码
\Encore\Admin\Form::extend('select', \App\Admin\Extensions\Select::class);
它会覆盖原先的$form->select()方法,或者你任然需要原先的功能,可以换个方法名,如
\Encore\Admin\Form::extend('self_select', \App\Admin\Extensions\Select::class);
二、后台登陆增加验证码示例
安装验证码库(具体安装参看文档)
composer require mews/captcha
复制vendor/encore/laravel-admin/src/Controllers/AuthController.php到app/Admin/Controllers/AuthController.php,修改代码如下
<?php
namespace App\Admin\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
class AuthController extends Controller
{
/**
* Login page.
*
* @return \Illuminate\Contracts\View\Factory|Redirect|\Illuminate\View\View
*/
public function getLogin()
{
if (!Auth::guard('admin')->guest()) {
return redirect(config('admin.route.prefix'));
}
return view('admin.login');
}
/**
* @param Request $request
*
* @return mixed
*/
public function postLogin(Request $request)
{
$credentials = $request->only(['username', 'password','captcha']);
$validator = Validator::make($credentials, [
'username' => 'required',
'password' => 'required',
'captcha' => 'required|captcha'
]);
if ($validator->fails()) {
return Redirect::back()->withInput()->withErrors($validator);
}
unset($credentials['captcha']);
if (Auth::guard('admin')->attempt($credentials)) {
admin_toastr(trans('admin.login_successful'));
return redirect()->intended(config('admin.route.prefix'));
}
return Redirect::back()->withInput()->withErrors(['username' => $this->getFailedLoginMessage()]);
}
/**
* @return string|\Symfony\Component\Translation\TranslatorInterface
*/
protected function getFailedLoginMessage()
{
return Lang::has('auth.failed')
? trans('auth.failed')
: 'These credentials do not match our records.';
}
}
在resources/lang/zh-CN/validation.php中添加
'captcha' => ':attribute 错误',
'attributes' => [
'captcha' => '验证码',
//...
]
复制vendor/encore/laravel-admin/resources/views/login.blade.php到resources/views/admin/login.blade.php。
新增内容如下:
<div class="form-group has-feedback {!! !$errors->has('captcha') ?: 'has-error' !!}">
@if($errors->has('captcha'))
@foreach($errors->get('captcha') as $message)
<label class="control-label" for="inputError"><i class="fa fa-times-circle-o"></i>{{$message}}</label></br>
@endforeach
@endif
<input type="text" class="form-control" style="display: inline;width: 60%" placeholder="{{ trans('admin.captcha') }}" name="captcha">
<span class="glyphicon glyphicon-refresh form-control-feedback captcha" style="right:39%;z-index: 100"></span>
<img style="display: inline;width: 37%;height: 36px;float: right" class="captcha" src="{{ captcha_src('admin') }}">
</div>
<script>
$(function () {
$('.captcha').click(function () {
$('img[class="captcha"]').attr('src','{{ captcha_src('admin') }}'+Math.random());
});
});
</script>
app/Admin/routes.php中新增
$router->get('auth/login', 'AuthController@getLogin');
$router->post('auth/login', 'AuthController@postLogin');
覆盖原先路由
laravel-admin可以自定义视图么?
@eiomi 挖个坟,哥们 ,找到怎么自定义视图了么 ? 他文档里写了,我照着改了但是没有生效。
推荐无感知的Google验证码
扩展:lyne007/auth-recaptcha
截图