Laravel5.6博客搭建系列⼀
Laravel框架⽬前已经发展到5.6版本了,但是⽬前官⽅的⼊门教程还是基于5.1的博客教程。为了更多的⼈能快速上⼿新版本,本教程使⽤Laravel5.6
⼀部⼀部跟⼤家分享如何搭建⼀个博客系统。下⾯来看⼀下如何⽤⼗分钟使⽤Laravel5.6搭建简单博客
安装环境
Laravel 框架对PHP版本和扩展有⼀定要求
PHP >= 7.1.3
PHP OpenSSL 扩展
PHP PDO 扩展
PHP Mbstring 扩展
PHP Tokenizer 扩展
PHP XML 扩展
PHP Ctype 扩展
PHP JSON 扩展
下载安装PHP7,composer,mysql
执⾏ composer global require "laravel/installer", 安装laravel之后配置环境变量,执⾏laravel new blog
配置
编辑.env 修改数据库⽤户名密码,数据库名称,.env本⾝是隐藏⽂件,注意开启显⽰隐藏⽂件
创建博客⽂章模型数据迁移⽂件
执⾏php artisan make:model --migration Post,会在database/migrations⽬录下建⽴"⽇期create_posts_table.php"⽂件,编辑该⽂件
Schema::create('posts',function(Blueprint $table){
$table->increments('id');
$table->string('slug')->unique();
$table->string('title');
$table->text('content');
$table->timestamps();
$table->timestamp('published_at')->nullable()->index();
});
这其实是在设置⽂字内容表的数据字段
id ⾃增⽂章id
slug seo url 唯⼀
title 标题
content 内容
timestamps()会⾃动创建⼀个默认是create_at的字段,⽤于记录数据的创建时间
published_at 发布时间 不能为空 并且建⽴索引
创建博客⽂章模型
php项目搭建命令同时会在app⽬录下建⽴⼀个Post.php⽂件,编辑⽂件
protected $dates = ['published_at'];
public function setTitleAttribute($value)
{
$this->attributes['title'] = $value;
if (! $this->exists) {
$this->attributes['slug'] = str_slug($value);
}
}
执⾏数据迁移,在数据库创建数据表
执⾏php artisan migrate,该命令会在数据库中根据配置创建数据表
填充数据
Laravel提供数据填充,添加factory ⽂件 database/factories/PostFactory.php,内容如下:
<?php
use Faker\Generator as Faker;
$factory->define(App\Post::class, function (Faker $faker) {
return [
'title' => $faker->sentence(mt_rand(3, 10)),
'content' => join("\n\n", $faker->paragraphs(mt_rand(3, 6))),
'published_at' => $faker->dateTimeBetween('-1 month', '+3 days'),
]
;
});
执⾏php artisan make:seed PostsTableSeeder创建⽣博客⽂章数据成器,命令会在database/seeds下建⽴PostsTableSeeder.php⽂件。然后执⾏***composer dump-autoload 导⼊(否则class not found)***
function run(){
factory(App\Post::class, 50)->create();
}
编辑database/seeds/DatabaseSeeder.php中编辑
public function run()
{
$this->call(PostsTableSeeder::class);
}
执⾏ php artisan db:seed ,命令会根据数据⽣成器⽣成50条post数据
添加博客配置
在config⽬录添加blog.php⽂件,⽂件内容如下:
<?php
return [
'title' => 'My Blog',
'posts_per_page' => 5
];
添加路由
修改routes/web.php⽂件
Route::get('/', function () {
return redirect('/blog');
});
Route::get('blog', 'BlogController@index');
Route::get('blog/{slug}', 'BlogController@showPost');
创建控制器
执⾏php artisan make:controller BlogController,在app/Http/Controllers下建⽴BlogController.php,修改内容如下
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
use Illuminate\Support\Carbon;
class BlogController extends Controller
{
public function index()
{
$posts = Post::where('published_at', '<=', Carbon::now())
->orderBy('published_at', 'desc')
->paginate(config('blog.posts_per_page'));
return view('blog.index', compact('posts'));
}
public function showPost($slug)
{
$post = Post::whereSlug($slug)->firstOrFail();
return view('blog.post')->withPost($post);
}
}
创建视图模板
在resources/view下建⽴***blog⽂件夹***,分别添加index.blade.php,post.blade.php⽂件分别⽤户博客列表和详情的展⽰
index.blade.php
{% raw %}
<html>
<head>
<title>{{ config('blog.title') }}</title>
<link href="cdn.bootcss/bootstrap/4.1.0/css/bootstrap.css"rel="stylesheet"> </head>
<body>
<div class="container">
<h1>{{ config('blog.title') }}</h1>
<h5>Page {{ $posts->currentPage() }} of {{ $posts->lastPage() }}</h5>
<hr>
<ul>
@foreach ($posts as $post)
<li>
<a href="/blog/{{ $post->slug }}">{{ $post->title }}</a>
<em>({{ $post->published_at }})</em>
<p>
{{ str_limit($post->content) }}
</p>
</li>
@endforeach
</ul>
<hr>
{!! $posts->render() !!}
</div>
</body>
</html>
{% endraw %}
post.blade.php
{% raw %}
<html>
<head>
<title>{{ $post->title }}</title>
<link href="cdn.bootcss/bootstrap/4.1.0/css/bootstrap.css"rel="stylesheet"> </head>
<body>
<div class="container">
<h1>{{ $post->title }}</h1>
<h5>{{ $post->published_at }}</h5>
<hr>
{!! nl2br(e($post->content)) !!}
<hr>
<button class="btn btn-primary"onclick="(-1)">
« Back
</button>
</div>
</body>
</html>
{% endraw %}
效果
如果报错:
1071 Specified key was too long; max key length is 767 bytes,修改App\Providers\AppServiceProvider.php,引⼊use Illuminate\Support\Facades\Schema;,在boot中添加:Schema::defaultStringLength(191);
本教程代码
更多内容关注 “写PHP的⽼王”

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。