SPONSORS

Deploy Your Apps on AWS Cloud
2566 views · 280 days ago

![Creating a Tiny Blog Management system in Laravel 5.7](https://images.ctfassets.net/vzl5fkwyme3u/7hiPly9aeW8i6IU0wkK4Gg/5b13c5fb7f273be44f44c87fb2ce5f5f/AdobeStock_205314257.jpeg?w=1000)

Hey There,

I am expecting you are familiar with PHP. In this post I will be using the Laravel framework to create a small blog system. I am showing here very simple steps to create blogs, If you want this complete code then please message me.

**What are major Prequisites for Laravel:**

* PHP version >= 5.6

* Composer should be installed in system

Create a project with name tiny_blog with following command

```composer create-project laravel/laravel --prefer-dist tiny_blog```

enter into the laravel project

```cd tiny_blog```

create a migration file using following artisan command

<pre>php artisan make:migration create_blog_table</pre>

After this command you will found a new file created in database/migrations folder in your project, Just edit the file having 'create_blog_table' appended in its name

Now replace following code to create table schema with function up(), So now the method will look like following:

```

public function up()

{

Schema::create('blogs', function (Blueprint $table) {

$table->increments('id');

$table->integer('user_id');

$table->string('category');

$table->string('title');

$table->text('description');

$table->timestamps();

});

}

```

replace following snippet with down method, it will look like following:

```

public function down()

{

Schema::dropIfExists('blogs');

}

```

Its time to run the migration file we have created

```php artisan migrate```

After running,It will create the blogs table in database.Now time to create form and insert data into the table

Laravel itsef provide authentication , use following artisan command :

```php artisan make:auth```

Now start Larvel:

```php artisan serve```

it will start the laravel development server at `http://127.0.0.1:8000`

Now if you run that url the basic default ui will be created and login & register link you can see in Top right position of header

You can register and login now.this feature is provided by authentication module.

Now we need to create a controller for manage blogs with following command:

```php artisan make:controller BlogController```

will create a file named **BlogController.php** in** app/HTTP/controllers** folder location

Now we need to create a Model also, use following command

```php artisan make:model Blog```

will create a file named **Blog.php** in app folder location

Now in Controller we need to create a method for create blogs and available that method in Routes to access it via url. Just edit **routes/web.php** file and add the following line

```php

Route::get('blog/create','[email protected]');

```

__/create/blog/__ will be url route that land on Blog Controller's createBlog method using get method.

Now before running this route just go to the app/Http/Controllers folder and Edit BlogController.php file and Add the createBlog method in that class as following

```

public function createBlog()

{

return view('blog.create');

}

```

This code will try to load the view from **/resources/views/blog/create.blade.php**

In Laravel blade is a template engine. As we had not created the view file yet, so we need to create a blog folder inside **/resources/views/ ** folder then inside blog folder create a file

**create.blade.php** with following form

```

@extends('layouts.app')

@section('content')

<div class="container">

@if ($errors->any())

<div class="alert alert-danger">

<ul>

@foreach ($errors->all() as $error)

<li>{{ $error }}</li>

@endforeach

</ul>

</div><br />

@endif

<div class="row">

<form method="post" action="{{url('blog/create')}}">

<div class="form-group">

<input type="hidden" value="{{csrf_token()}}" name="_token" />

<label for="title">Title:</label>

<input type="text" class="form-control" name="title"/>

</div>

<div class="form-group">

<label for="title">Category/Tags:</label>

<input type="text" class="form-control" name="category"/>

</div>

<div class="form-group">

<label for="description">Description:</label>

<textarea cols="10" rows="10" class="form-control" name="description"></textarea>

</div>

<button type="submit" class="btn btn-primary">Submit</button>

</form>

</div>

</div>

@endsection

```

Now we need to add a additional route to handle the post request on blog/create route, Just edit routes/web.php file and just add following line in last:

```Route::post('blog/create','[email protected]'); ```

post route to handle the form post on route blog/create

Now create a method name saveBlog to save the user input data in the form

```

public function saveBlog(Request $request)

{

$blog = new Blog();

$this->validate($request, [

'title'=>'required',

'category'=>'required',

'description'=> 'required'

]);

$blog->createBlog($request->all());

return redirect('blog/index')->with('success', 'New blog has been created successfully :)');/ / the index method is the list blogs method that we will create in further lines

}

```

Notice This method is using Blog object that we don't know that where it comes from? , So to make above code working we need to include the model which we created earlier need to include in our controller file So use following code to include it before the class created.

```use App\Blog;```

Now following line shows that there is a method named createBlog in `Model(app/Blog.php)`, but in actual it is not there:

```php

$blog->createBlog($data);

```

So go to the file app/Blog.php and Edit it and inside the class add following method:

```php

public function createBlog($data)

{

$this->user_id = auth()->user()->id;

$this->title = $data['title'];

$this->description = $data['description'];

$this->category = $data['category'];

$this->save();

return 1;

}

```

Now the creation of blog task has been done , Its time to show the created Entries So just create a route blog/index in routes/web.php

```php

Route::get('blog/index','[email protected]');

```

get route blog/index to show all the created blogs by current user

Now just add a method in controller

```php

public function showAllBlogs()

{

$blogs = Blog::where('user_id', auth()->user()->id)->get();

return view('blog.index',compact('blogs'));

}

```

This method requires to create a index view in blog folder , So create a file named index.blade.php in /resources/views/blog/ folder with following code

```php

@extends('layouts.app')

@section('content')

<div class="container">

@if(\Session::has('success'))

<div class="alert alert-success">

{{\Session::get('success')}}

</div>

@endif

<a type="button" href="{{url('blog/create')}}" class="btn btn-primary">Add New Blog</a>

<br>

<table class="table table-striped">

<thead>

<tr>

<td>ID</td>

<td>Title</td>

<td>Category</td>

<td>Description</td>

<td colspan="2">Action</td>

</tr>

</thead>

<tbody>

@foreach($blogs as $blog)

<tr>

<td>{{$blog->id}}</td>

<td>{{$blog->title}}</td>

<td>{{$blog->category}}</td>

<td>{{$blog->description}}</td>

<td>Edit</td>

<td>Delete</td>

</tr>

@endforeach

</tbody>

</table>

<div>

@endsection

```

Now all code is ready but we need to add 1 line of code to prevent the blog controller without authentication or without login

just add the following constructor method in BlogController class

```php

public function __construct()

{

$this->middleware('auth');

}

```

this constructor method will call very first when user will try to access any of BlogController class method, and the middleware will check whether user is logged in then only it will allow to access that method otherwise it will redirect to login page automatically.

After It Run your Code and you will able to create and listing your created blogs/articles. but the Edit and Delete links are not working right now, If you want that also working then please comment here or message me. If we get multiple requests then definitely i will write its part 2 article

Thanks very much for reading this blog, if you have any doubt about it then let me know in comments or by messaging me.

Following is the final code for BlogController.php

```php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Blog;

class BlogController extends Controller

{

public function __construct()

{

$this->middleware('auth');

}

public function createBlog()

{

return view('blog/create');

}

public function saveBlog(Request $request)

{

$blog = new Blog();

$this->validate($request, [

'title'=>'required',

'category'=>'required',

'description'=> 'required'

]);

$blog->createBlog($request->all());

return redirect('blog/index')->with('success', 'New blog has been created successfully :)');

}

public function showAllBlogs()

{

$blogs = Blog::where('user_id', auth()->user()->id)->get();

return view('blog.index',compact('blogs'));

}

}

```

SPONSORS

Faster PHP Cloud Hosting