Skip to content

Commit

Permalink
毕业设计o2o开发 第一天
Browse files Browse the repository at this point in the history
  • Loading branch information
prohorry-me committed Aug 7, 2018
1 parent 577b5b6 commit 6b58194
Show file tree
Hide file tree
Showing 2 changed files with 312 additions and 0 deletions.
312 changes: 312 additions & 0 deletions laravel/毕业设计/开发日志1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,312 @@
# 部署开发环境
* 选择 homestaed,在 windows 系统下部署 homestead 可以参考[部署笔记](https://github.com/prohorry-me/notes/blob/master/laravel/Windows%E4%B8%8Bhomestead%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8.md)
* 创建项目
```
# 进入并开启 homestead
cd ~/Homestead && vagrant up
vagrant ssh
# 此时已经进入虚拟机
cd ~/Code
composer create-project laravel/laravel o2o --prefer-dist "5.5.*"
# 创建 o2o 项目,用 5.5 的 laravel
```
* 在本地的配置
```
# 用记事本打开 hosts ,增加站点
notepad C:/Windows/System32/Drivers/etc/hosts
~~~ 192.168.10.10 o2o.test ~~~
# 编辑 ~/Homestead/Homestead.yaml ,增加映射关系
~~~
# 站点配置
sites:
# o2o
- map: o2o.test
to: /home/vagrant/Code//public
# 数据库
databases:
# o2o
- o2o
~~~
```
> 配置完成后需要重载 `vagrant provision` (重读配置文件), `vagrant reload`(重启 Homestead )
* 项目配置文件
```
# .env
APP_NAME=LaraBBS #项目名称
...
APP_URL=http://larabbs.test #项目网址
...
DB_DATABASE=larabbs #数据库
...
# config/app.php
'timezone' => 'Asia/Shanghai', //时区
'locale' => 'zh-CN', //语言
# app/Providers/AppServiceProvider.php
use Carbon\Carbon; //引用 Carbon 类
...
public function boot()
{
Carbon::setLocale('zh'); // <= 将时间显示设置为中文
}
```
* GitHub 托管
```
# 在项目路径下依次执行
git init
git add .
git commit -m "本地项目初始化"
git remote add origin GitHub 仓库地址 ssh
git push --set-upstream origin master
```
> 确保本机有 github 的 ssh key,可以参考 [我的笔记](https://github.com/prohorry-me/notes/blob/master/%E7%B3%BB%E7%BB%9F%E5%92%8C%E8%BD%AF%E4%BB%B6%E4%BD%BF%E7%94%A8/a%E4%B8%80%E5%8F%B0%E6%96%B0%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%9A%84%E8%87%AA%E6%88%91%E4%BF%AE%E5%85%BB.md) 中的第4点。
# 用户角色
> 统一都用 users 表存储用户信息。
> 有一个字段 `level` 标识用户级别:0普通用户,1门店店长,2管理员,3站长。
> 辅以 laravel_permission 完成权限认证。
* -1,游客:能访问主页、看所有门店、看所有商品、能登陆和注册。
* 0,普通用户:拥有上面所有权限,且能操作购物车,生成订单。(普通用户和游客用 laravel 自带的中间件隔离)
* 1,门店店长:拥有上面所有权限,且能访问门店管理后台,管理自己的门店信息,为门店添加删除和编辑商品。 Shopowner
* 2,管理员:拥有上面所有权限,且能访问后台,管理门店,商品,订单。 Maintainer
* 3,站长,拥有所有权限。 Founder

# 布局模板
* 思考:整个项目应该有3个大的模块
1. 游客和普通用户能访问的前台 => 展示所有门店、商品。购物车。完成购买操作等。
2. 门店店长能访问的门店管理后台 => 展示自己的商品、订单、能够对商品和订单完成一定的操作,可以在后台编辑个人资料等。
3. 管理员和站长能访问的后台=> 展示所有用户、所有门店、所有商品、所有订单。
* 结论如下:
1. 前台用框架自带的用户认证脚手架自动生成的布局模板
2. 门店管理后台需要自己写并配置访问权限
3. 后台用 laravel_administrator 插件
* 开始完善前台:
1. 编辑迁移文件 create_users_table.php
```
// up() 方法中声名增加字段 level (用户等级), avatar(用户头像)
$table->integer('level')->unsigned()->default(0);
$table->string('avatar')->nullable();
```
2. 填充示例数据
* 编辑 UserFactory
```
<?php
use Faker\Generator as Faker;
use Carbon\Carbon;
$factory->define(App\User::class, function (Faker $faker) {
$now = Carbon::now()->toDateTimeString();
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => bcrypt('ceshi'),
'created_at' => $now,
'updated_at' => $now,
'remember_token' => str_random(10),
];
});
```
* 创建填充器 `php artisan make:seeder UsersTableSeeder` 并编辑
```
<?php
use Illuminate\Database\Seeder;
use App\User;
class UsersTableSeeder extends Seeder
{
public function run()
{
$users = factory(User::class)->times(10)->make();
$users = $users->makeVisible(['password', 'remember_token'])->toArray(); // 这一步必须否则写不进数据库
User::insert($users);
// 配置站长
$user = User::find(1);
$user->name = "Founder";
$user->email = "[email protected]";
$user->password = bcrypt('woshiceshiyonghu');
$user->save();
}
}
```
* 编辑 DatabaseSeeder@run 添加 `$this->call(UsersTableSeeder::class);`,然后执行迁移并填充用户表 `php artisan migrate --seed`
3. 生成用户认证脚手架 `php artisan make:auth`
> 安装 node 包、汉化视图等省略。
> 生成的布局模板 ../layouts/app.blade.php 的内容中没有用 `<div class"container">` 将内容包起来,但是我们前台所有页面都要用 container 容器,就直接添加这个样式,再把其他视图最外面的容器给干掉。
* 编辑一下路由:(不要 '/home' 路由,用 '/' 路由代替)
```
// 用户认证
Auth::routes();
// 根
Route::get('/', 'PagesController@index')->name('root');
```
* 编辑一下登陆注册等控制器的重定向地址,不要让他们跳 '/home',跳 '/'。(全局查找,逐一替换)
* 创建控制器 `php artisan make:controller PagesController`,并编辑 PagesController@index
```
/**
* 首页
*/
public function index()
{
return view('pages.index');
}
```
* 编辑视图 ../pages/index.blade.php (暂时没什么需要编辑的内容,以后首页拿来展示推荐位,略)
4. 重置密码功能
* .env 中配置 smtp 服务,略。
* 重置密码邮件是全英文的问题:
* 新建通知类 `php artisan make:notification ResetPassword`,并编辑
```
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class ResetPassword extends Notification
{
public $token;
public function __construct($token)
{
$this->token = $token;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('重置密码')
->line('这是一封密码重置邮件,如果是您本人操作,请点击以下按钮继续:')
->action('重置密码', url(route('password.reset', $this->token, false)))
->line('如果您并没有执行此操作,您可以选择忽略此邮件。');
}
}
```
* 重写方法 User@endPasswordResetNotification
```
use App\Notifications\ResetPassword; //引用通知类
...
// 重写 trait 提供的方法 Notifiable@sendPasswordResetNotification
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPassword($token));
}
```
* 生成邮件模板视图 `php artisan vendor:publish --tag=laravel-notifications` ,汉化底部、
5. 汉化错误提示,安装扩展包 overtrue/laravel : `omposer require "overtrue/laravel-lang:~3.0"` 即可。
6. 注册页面的验证码
* 安装扩展包 `composer require "mews/captcha:~2.0"`
* 注册页视图添加表单项(样式也需要在 app.scss 中美化一下,略)
```
<div class="form-group {{ $errors->has('captcha') ? ' has-error' : '' }}">
<label for="captcha" class="col-md-4 control-label">验证码</label>
<div class="col-md-6">
<input id="captcha" class="form-control" name="captcha" >
<img class="thumbnail captcha" src="{{ captcha_src('flat') }}" onclick="this.src='/captcha/flat?'+Math.random()" title="点击图片重新获取验证码">
@if ($errors->has('captcha'))
<span class="help-block">
<strong>{{ $errors->first('captcha') }}</strong>
</span>
@endif
</div>
</div>
```
* 在 RegisterController@validator 中配置验证码校验
```
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'captcha' => 'required|captcha', // <= 添加验证规则
], [
// 添加错误提示信息
'captcha.required' => '验证码不能为空',
'captcha.captcha' => '请输入正确的验证码',
]);
```
7. 用户编辑个人信息
* routes/web.php 新增路由 `Route::resource('/users', 'UsersController', ['only' => ['show', 'edit', 'update']]);`
* 新建视图 ../users/show.blade.php 以及 edit.blade.php
* 在 app.blade.php 中增加入口(当用户的登陆之后有一个下拉菜单,增加 “个人信息” 和 “编辑资料” 按钮),略
* 创建控制器 UsersController `php artisan make:controller UsersController --model=User --resource` 并编辑
```
/**
* 用户资料展示
*/
public function show(User $user)
{
return view('users.show', compact('user'));
}
/**
* 用户编辑个人资料
*/
public function edit(User $user)
{
return view('users.edit', compact('user'));
}
/**
* 更新用户资料
*/
public function update(Request $request, User $user)
{
// 验证数据
$data = $this->validate($request, [
'name' => 'required|min:4|max:32',
'avatar' => 'required',
'password' => 'nullable|min:10|max:64|confirmed',
],[
'avatar.required' => '必须上传头像',
]);
$user->name=$data['name'];
$user->avatar=$data['avatar'];
if(!empty($data['password'])) {
$user->password = bcrypt($data['password']);
}
$user->save();
if(empty($data['password'])) {
session()->flash('success', '更新个人信息成功');
return redirect()->route('users.show', $user->id);
}else {
Auth::logout();
session()->flash('info', '由于您修改了个人密码,请重新登陆');
return redirect()->route('login');
}
}
```
> 上面一些过程中用到了 “闪存消息” 以及 “错误提示信息” ,他们的视图作为组件存于 ../layouts/_errors.blade.php 和 _messages.blade.php
* 集成头像上传功能参考 [DEMO](https://github.com/prohorry-me/laravel_image_uploader_demo)
> 这个插件部署过程中需要生成软连接,无法生成的话,就用管理员模式登陆 homestead 再生成。
Binary file added laravel/毕业设计/数据库E-R图.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 6b58194

Please sign in to comment.