Tiếp tục loạt bài viết về Laravel Framework hôm nay mình sẽ hướng dẫn bạn một chức năng quan trọng. Đó chính là thêm bài viết trong Laravel. Bạn sẽ biết cách đưa nội dung bao gồm tiêu đề, đường dẫn URL, Content, hình ảnh vào trong cơ sở dữ liệu Database như thế nào. Bắt đầu nhé!

them-bai-viet-laravel-1

Bước 1: Thêm một bảng là posts bằng lệnh SQL. (Nếu đã tồn tại trước đó thì xóa bảng đó đi)

Bạn cũng lưu ý nó nằm ở trong cơ sở dữ liệu tên là data. Xem lại những bài viết trước đó

them-bai-viet-laravel

Bước 2: Khởi tạo một file là InsertModel.php tại

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;


class InsertModel extends Model
{
    protected $table='posts';  
    public $timestamps = false;
}

Bước 3: Khởi tạo file InsertController.php với lệnh

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\InsertModel;
use DB;

class InsertController extends Controller
{
  public function insertform(){
    $data = DB::table('posts')->select('id','title','content','image')->get();
    return view('insert')->with('viewdata', $data);
}

  
    public function insert_data(Request $request) {
        $title = $request->input('title');
        $content = $request->input('content');
        $url = $request->input('url');

        $request->validate([
        		'title' => 'required',
        		'content' => 'required',
                'file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048'
            ]
        );
        $article = new InsertModel();
        $article->title = $title;
        $article->url = $url;
        $article->content = $content;

        $image = $request->file('file');
        $inputimg = time().'.'.$image->getClientOriginalExtension();
        $destinationPath = public_path('/uploads');
        $image->move($destinationPath, $inputimg);

        $article->image = $inputimg;
        $article->save();
    }
}

Bước 4: Tạo insert.blade.php ở Views

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">

    <title>Thêm bài viết Laravel</title>
    <style>
        .container {
            max-width: 600px;
        }
        dl, ol, ul {
            margin: 0;
            padding: 0;
            list-style: none;
        }
    </style>
</head>

<body>

    <div class="container mt-5">
        <form action="create" method="post" enctype="multipart/form-data">
        	<input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>">
          <h2 class="text-center mb-5">Thêm bài viết trong Laravel</h2>
            @csrf
            @if ($message = Session::get('success'))
            <div class="alert alert-success">
                <strong>{{ $message }}</strong>
            </div>
          @endif

          @if (count($errors) > 0)
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                      <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
          @endif
          
            <div class="input-group mb-3">
                <input type="file" name="file" class="custom-file-input" id="chooseFile">
                <label class="custom-file-label" for="chooseFile">Chọn ảnh</label>
            </div>

            <div class="input-group mb-3">
              <div class="input-group-prepend">
                <span class="input-group-text" id="basic-addon1">Tiêu đề</span>
              </div>
              <input type="text" class="form-control" name="title" placeholder="Nhập tiêu đề không quá 60 ký tự" aria-label="Username" aria-describedby="basic-addon1">
            </div>

            <div class="input-group mb-3">
              <div class="input-group-prepend">
                <span class="input-group-text" id="basic-addon1">URL</span>
              </div>
              <input type="text" class="form-control" name="url" placeholder="Đường dẫn URL" aria-label="Username" aria-describedby="basic-addon1">
            </div>

            <div class="input-group">
                  <div class="input-group-prepend">
                    <span class="input-group-text">Nội dung</span>
                  </div>
                  <textarea class="form-control" name="content" placeholder="Nhập nội dung bài viết" aria-label="With textarea"></textarea>
            </div>

            <button type="submit" name="submit" class="btn btn-primary btn-block mt-4">
                Upload Files
            </button>
        </form>
        <br>
        <table class="table table-dark">
        <tr>
            <th scope="col">ID</th>
            <th scope="col">Tiêu đề</th>
           	<th scope="col">Nội dung</th>
           	<th scope="col">Thumbnail</th>
        </tr>
        @foreach($viewdata as $data)
        <tr>
            <td>{{ $data->id }}</td>
            <td>{{ $data->title }}</td>
           	<td>{{ $data->content }}</td>
           	<td>{{ $data->image }}</td>
        </tr>
            @endforeach
        </table>
    </div>

</body>
</html>

Bước 5: Thêm thư mục uploads trong (C:\xampp\htdocs\quachquynh\public)

Bước 6: Mở tập tin web.php (C:\xampp\htdocs\quachquynh\routes) thêm định tuyến

Route::get('insert','App\Http\Controllers\[email protected]');
Route::post('create','App\Http\Controllers\[email protected]_data');

Nếu thêm trước đó rồi thì thôi không cần thêm nữa.

Cuối cùng thì bạn truy cập vào http://localhost/quachquynh/public/insert thêm dữ liệu. Sau khi ấn submit xong bạn mở thư mục uploads và bảng posts trên Database xem dữ liệu đã thêm vào thành công hay chưa.

Cùng chủ đề

Bình luận!

Xin lưu ý rằng tất cả các bình luận đều được kiểm duyệt theo chính sách bảo mật và tất cả các liên kết đều là nofollow. KHÔNG sử dụng từ khóa trong trường tên. Hãy để lại một cuộc trò chuyện cá nhân và ý nghĩa. *