一.心得体会
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以从面条一样杂乱的代码中解脱出来;它可以构建网络APP,而且每行代码都可以简洁、富于表达力。
在Laravel中已经具有了一套高级的PHP ActiveRecord实现 -- Eloquent ORM。它能方便的将“约束(constraints)”应用到关系的双方,就具有了对数据的完全控制,而且享受到ActiveRecord的所有便利。Eloquent原生支持Fluent中查询构造器(query-builder)的所有方法。
让我学会了:
1..对laravel整体框架更加熟悉
2.实现了后台数据与前台数据交换
3.巩固和学习了数据库的删除、增加、修改
4.对之前学的所有的关于PHP基础、框架、网页、等进行了综合应用
二.编程思路--内容管理系统
一.项目介绍:本项目分为前台和后台。
1.下面先展示一下项目的前台页面
前台的功能包括用户登录与注册、内容列表、内容详细页、广告展示、评论和热门内容等。
2.再来看一下后台的页面效果。后台在未登录的状态下会跳转到登录页面
输入用户名“admin”、密码“123456”和验证码后,点击“登录”按钮,就可以进行登录了。
3.登录成功后,就会进入后台首页
顶部右侧显示了当前登录的用户名“admin”和“退出”按钮,点击“退出”按钮就可以退出后台系统。页面的左侧有一个菜单栏,用户可以在菜单栏中选择一个菜单项进行操作。
二.前期准备
1.首先,需要在计算机上安装 Laravel 框架。可以使用 Composer 在终端中安装 Laravel。命令如下:
composer create-project --prefer-dist laravel/laravel ./58.*
2.框架安装完成后,在Apache的conflextra\httpd-whosts.conf配置文件中创建一个虚拟主机,具体配置如下:
<VirtualHost *:80>
DocumentRoot "C:/web/apache2.4/htdocs/cms/public"
ServerName cms. test
</VirtualHost>
保存配置文件后,重启Apache使配置生效。然后,编辑Windows系统的hosts 文件,添加一条解析记录“127.0.0.1 cms. test”。
3.登录mysql服务器,创建数据库cms,将cms作为内容管理系统的数据库:
mysql>CREATE DATABASE cms CHARSET utf8
5.打开项目,在config\database.php数据库配置文件中,将数据修改为cms,具体代码如下:
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'manager'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', '123456'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
]
6.在.evn文件中配置正确的数据库配置信息
三.后台用户登录
1.创建一个迁移文件
php artisan make:migration create_admin_table
2.在迁移文件的up()方法中添加表结构信息
public function up()
{
Schema::create('admin_user', function (Blueprint $table) {
$table->increments('id')->comment('主键');
$table->string('username', 32)->comment('用户名')->unique();
$table->string('password', 32)->comment('密码');
$table->char('salt', 32)->comment('密码salt');
$table->timestamps();
});
}
3.进行文件迁移
php artisan migrate
4.创建填充文件
php artisan make:seeder AdminUserTableSeeder
5.打开AdminUserTableSeeder.php文件,在run ()方法中编写填充代码
public function run()
{
//
$salt = md5(uniqid(microtime(), true));
$password = md5(md5('123456'). $salt);
DB::table('admin_user')->insert([
[
'id' => 1,
'username' => 'admin',
'password' => $password,
'salt' => $salt
],
]);
}
6.执行填充文件
php artisan db:seed --class=AdminUserTableSeeder
7.创建模型
php artisan make:model Admin
8.打开Admin.php ,在模型中指定要操作的表名
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Admin extends Model
{
protected $table = "admin_user";
public $fillable = ['username','password'];
}
四.显示登录页面
1.创建User控制器
php artisan male:controller Admin\UserController
2.打开UserController.php ,创建login()方法
public function login(Request $request)
{
$rule = [
'name' => 'required|bail',
'password' => 'required|min:6'
];
$message = [
'name.required' => '用户名不能为空',
'password.required' => '密码不能为空',
'password.min' => '密码最少为6位'
];
$validator = Validator::make($request->all(), $rule, $message);
if ($validator->fails()) {
foreach ($validator->getMessageBag()->toArray() as $v) {
$msg = $v[0];
}
return response()->json(['status'=>'2', 'msg'=>$msg]);
}
$name = $request->get('name');
$password = $request->get('password');
$theUser = User::where('name', $name)->first();
if ($theUser) {
if ($password == $theUser->password) {
Session::put('users', ['id' => $theUser->id,'name' => $name]);
return response()->json(['status' => '1', 'msg' => '登录成功']);
} else {
return response()->json(['status' => '2', 'msg' => '密码错误']);
}
} else {
return response()->json(['status' => '2', 'msg' => '用户不存在']);
}
}
3.在router\web.php文件中添加路由规则
Route::get('/admin/login', 'Admin\UserController@login');
4.在resources\views目录下创建admin目录,在admin目录下创建login.blade.php文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 引入静态文件 -->
<link rel="stylesheet" href="{{asset('admin')}}/common/twitter-bootstrap/4.4.1/css/bootstrap.min.css">
<link rel="stylesheet" href="{{asset('admin')}}/common/font-awesome-4.2.0/css/font-awesome.min.css">
<link rel="stylesheet" href="{{asset('admin')}}/common/toastr.js/2.1.4/toastr.min.css">
<link rel="stylesheet" href="{{asset('admin')}}/css/main.css">
<script src="{{asset('admin')}}/common/jquery/1.12.4/jquery.min.js"></script>
<script src="{{asset('admin')}}/common/twitter-bootstrap/4.4.1/js/bootstrap.min.js"></script>
<script src="{{asset('admin')}}/common/toastr.js/2.1.4/toastr.min.js"></script>
<script src="{{asset('admin')}}/js/main.js"></script>
<title>登录</title>
</head>
<body class="login">
<div class="container">
<!-- 登录表单 -->
<form action="{{ url('admin/check') }}" method="post" class="j-login">
<h1>后台管理系统</h1>
<div class="form-group">
<input type="text" name="username" class="form-control" placeholder="用户名" required>
</div>
<div class="form-group">
<input type="password" name="password" class="form-control" placeholder="密码" required>
</div>
<div class="form-group">
<input type="text" name="captcha" class="form-control" placeholder="验证码" required>
</div>
<!-- 验证码 -->
<div class="form-group">
<div class="login-captcha"><img src="{{ captcha_src() }}" alt="captcha"></div>
</div>
<div class="form-group">
{{csrf_field()}}
<input type="submit" class="btn btn-lg btn-block btn-success" value="登录">
</div>
</form>
</div>
<script>
$('.login-captcha img').click(function() {
$(this).attr('src', '{{ captcha_src()}}' + '?_=' + Math.random());
});
main.ajaxForm('.j-login', function() {
location.href = '/admin/index';
});
</script>
</body>
</html>
通过浏览器访问,其页面效果如下:
5.判断用户登录
public function register(Request $request)
{
$rule = [
'name' => 'required|unique:users',
'email' => 'required|email',
'password' => 'required|min:6',
'password_confirmation' => 'required'
];
$message = [
'name.require' => '用户名不能为空',
'name.unique' => '用户名不能重复',
'email.require' => '邮箱不能为空',
'email.email' => '邮箱格式不符合规范',
'password.require' => '密码不能为空',
'password.min' => '密码最少为6位',
'password.confirmed' => '密码和确认密码不一致'
];
$validator = Validator::make($request->all(), $rule, $message);
if ($validator->fails()) {
foreach ($validator->getMessageBag()->toArray() as $v) {
$msg = $v[0];
}
return response()->json(['status' => '2', 'msg' => $msg]);
}
$re = User::create($request->all());
if ($re) {
Session::put('users', ['id' => $re->id, 'name' => $re->name]); // 注册成功后保存登录状态
return response()->json(['status' => '1', 'msg' => '注册成功']);
} else {
return response()->json(['status' => '2', 'msg' => '注册失败']);
}
}
6.用户退出
public function logout()
{
if (request()->session()->has('users')) {
request()->session()->pull('users', session('users'));
}
return redirect('/');
}
8.添加路由规则:
Route::post('/admin/check', 'Admin\UserController@check');