laravel程序员我爱编程

30分钟用 Laravel 实现一个博客

2018-05-19  本文已影响58人  那就远走

介绍

准备工作

如果你愿意用root用户,你甚至只需要 create 一个 database 即可。 (不过不推荐,我的习惯是一个项目 对应 一个用户 + 一个数据库,root则只用来管理他们)

# 创建用户 blog, 密码自定义
CREATE USER 'blog'@'%' IDENTIFIED BY '密码';
# 创建数据库 blog, 设置默认编码为utf8
CREATE DATABASE `blog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
# 授权 授予 blog库下所有表的 所有权限 给 用户blog
GRANT ALL on blog.* to 'blog'@'%';
# 进入你本地服务器用于存放网站文档的目录,输入命令
composer create-project --prefer-dist laravel/laravel blog

下文中,“/” 即表示 laravel 框架的根目录

# 数据库配置
DB_CONNECTION=mysql #类型
DB_HOST=127.0.0.1 #ip
DB_PORT=3306 #端口
DB_DATABASE=数据库名
DB_USERNAME=用户名
DB_PASSWORD=密码
# 时区
'timezone' => 'Asia/Shanghai',
# 语言
'locale' => 'zh-CN',

准备工作总结

第一阶段: Migration、Factory、Seeder

你可能没有见过上面3个名词,不过和他们有关的文件都存放在 /database/ 下: 通过这个文件夹的名称,你大概已经猜到:这三个文件都是用来操作数据库的。



在日常的开发中,我们需要很多模拟的数据进行测试,模型工厂的作用就是帮我们快速的,随机的生成这些数据。

细心的你可能发现了,我们的数据表和模型的名字是有区别的:数据表为“小写复数形式”,而模型名为“大写单数形式”。 创建的模型都存在于 /app/ 下。


...
use App\User; // 在 class 关键字前面,引用一下 User 模型

class ...
public function run() 
{
    factory(App\User::class, 50)->create(); //向users表中插入50条模拟数据
    $user = User::find(1); //插入完后,找到 id 为 1 的用户
    $user->name = "najiuyuanzou"; //设置 用户名
    $user->email = "najiuyuanzou@test.com"; //设置 邮箱
    $user->password = bcrypt('liuhaoyu'); //设置 密码
    $user->save(); //保存
}

在这里我们明确1号用户为真实的可用的管理员用户!所以我们设置一下它的 用户名 邮箱 以及密码

public function run()
{
    // $this->call(UsersTableSeeder::class); // 这里给我们举例了如何引用其他Seeder
    $this->call(UserTableSeeder::class);
    $this->call(BlogTableSeeder::class);
    $this->call(CommentTableSeeder::class); // 这里有先后关系需要注意一下: 评论n : 1文章/用户,所以应该把它写在最后
}

第一阶段总结

也许你到这里会觉得这还不如你写sql语句。但是请相信我,等你熟练掌握使用这些东西之后,你的开发速度会非常快!(毕竟你不需要再 "INSERT INTO table values ()" 复制粘贴修改100遍了)

第二阶段: Auth的使用

第二阶段继续: Auth

第二阶段总结

第三阶段_1: 路由、模型、视图、控制器详解。

第三阶段_2:资源路由、在资源控制器中完成对博客的增删改查。

我们写的程序,除了前台好看的界面,就是后台的程序,而后台的程序无非就是“增删改查”以及“花式增删改查”罢了。
因此,仔细想想,对于一张数据表的操作,我们通常就需要这些行为:1、一个分页展示所有数据的列表 2、一个添加数据的功能 3、一个编辑数据的功能 4、一个显示单条数据详细信息的功能 5、一个删除功能。

第三阶段总结

第四阶段 评论功能

其实我们可以定义一条 Route::post('comment', 'CommentController@store') 路由,但是为什么要写资源路由呢?因为我要告诉你资源路由可以用 ['onlu'=>'操作'] 让其只支持一种操作:)

<form method="POST" action="{{ route('comment.store') }}">
    @csrf
    <input type="hidden" name="user_id" value="{{ Auth::user()->id }}">
    <input type="hidden" name="blog_id" value="{{ $blog->id }}">

    <div class="form-group">
        <label for="content"></label>
        <textarea id="content" class="form-control" cols="30" rows="10" name="content">您对这篇文章有什么看法呢?</textarea>
    </div>
    <button class="btn btn-primary" type="submit">发表评论</button>
</form>
public function store(Request $request)
{
    Comment::create($request->post());
    session()->flash('success', '评论成功!');
    return redirect()->back();
}
protected $fillable = [
    'content', 'user_id', 'blog_id'
];

在博客中,我们就没有使用验证,那是因为项目定位是一个个人博客,能够操纵博客增删改的只有我们自己。而评论则是只要有人注册账号,就可以评论了,所以我们应该对评论进行一些校验以防恶意攻击。

第四阶段总结

第五阶段 最后总结

也许文字很多,但是真正的代码可能只有不到100行,你如果熟练掌握,可能不需要30分钟,甚至10分钟,你就可以开发出这样一个博客了。

现在请告诉我,它是否配得上 “优雅” 的两字?:)

希望大家可以喜欢、学习和推广Laravel。如果您愿意付出比学习thinkphp5多0.01分的努力,我想这个框架是非常简单的。

如果您依然讨厌它的庞大,我向您推荐 Lumen 框架。

上一篇 下一篇

猜你喜欢

热点阅读