> 백엔드 개발 > PHP 튜토리얼 > Laravel에서 미니 블로그 구축

Laravel에서 미니 블로그 구축

小云云
풀어 주다: 2023-03-19 17:06:01
원래의
1333명이 탐색했습니다.

이 글에서는 주로 laravel을 사용하여 미니 블로그를 구축하는 방법에 대한 관련 정보를 예제 코드를 통해 매우 자세하게 소개하고 있습니다. 모두를 도울 수 있습니다.

1. 디자인 및 아이디어

첫 번째 코드 작성을 시작하기 전에, 작성 및 수정을 하지 않고 불필요한 코드를 더 많이 작성하지 않도록 처음부터 끝까지 만들고 싶은 제품을 디자인하도록 최선을 다해야 합니다.

  • 요구 사항 분석: 우리 미니 블로그에는 최소한 기사 추가/편집/보기/삭제 및 기사 목록 표시 기능이 포함되어야 합니다.

  • 데이터베이스 분석: 이 기능을 기반으로 기사를 저장하려면 Articles 데이터 테이블만 필요합니다.

  • 페이지 구조 분석: 헤더/기사 목록/하단 정보를 포함한 기본 템플릿을 생성하려면 템플릿 상속을 사용해야 합니다.

두 번째, 경로 생성

이 블로그를 완료하려면 다음 경로가 필요할 수 있습니다.

| 기능 | -------- | 기사 목록 페이지로 돌아가기 | 페이지 라우팅 | 기사 저장 기능 경로 | 기사 페이지 경로 편집 | | 기사를 꺼내서 업데이트한 후 다시 데이터베이스에 저장 | 기사 삭제 기능 라우팅 | 데이터베이스에서 기사 삭제 |

이러한 상황에 대해 라라벨은 거의 모든 기능을 제공하고 있는 것을 볼 수 있습니다. 매우 편리한 방법: RESTful 리소스 컨트롤러 및 라우팅.

routes.php를 열고 다음 코드를 추가하세요:

Route::resource('articles', 'ArticlesController');
로그인 후 복사

위의 코드 줄만 다음 7개의 경로를 생성하는 것과 동일하며 모두 경로 이름이 지정됩니다. 용법.

Route::get('/articles', 'ArticlesController@index')->name('articles.index'); 
Route::get('/articles/{id}', 'ArticlesController@show')->name('articles.show'); 
Route::get('/articles/create', 'ArticlesController@create')->name('articles.create'); 
Route::post('/articles', 'ArticlesController@store')->name('articles.store'); 
Route::get('/articles/{id}/edit', 'ArticlesController@edit')->name('articles.edit'); 
Route::patch('/articles/{id}', 'ArticlesController@update')->name('articles.update'); 
Route::delete('/articles/{id}', 'ArticlesController@destroy')->name('articles.destroy');
로그인 후 복사

3. 컨트롤러 만들기

artisan을 사용하여 기사 컨트롤러 만들기:

php artisan make:controller ArticlesController
로그인 후 복사

4. 기본 보기 만들기

resources/views/layouts/art.blade.php

템플릿 index.html 보기

5. 새 기사 양식

@extends('layouts.art')
@section('content')

 <form class="form-horizontal" method="post" action="{{route(&#39;blog.store&#39;)}}">
   {{ csrf_field() }}
 <p class="form-group">
 <label for="inputEmail3" class="col-sm-2 control-label">标题</label>
 <p class="col-sm-8">
  <input type="title" class="form-control" id="title" name="title">
 </p>
 </p>

 <p class="form-group">
 <label for="inputEmail3" class="col-sm-2 control-label">内容</label>
 <p class="col-sm-8">
  <textarea class="form-control" rows="5" id="content" name="content"></textarea>
 </p>
 </p>

 <p class="form-group">
 <p class="col-sm-offset-2 col-sm-10">
  <button type="submit" class="btn btn-default">创建</button>
 </p>
 </p>
</form> 
@endsection
로그인 후 복사

6. 기사 저장

이때 새 기사 양식을 작성하고 제출을 클릭하면 빈 페이지로 이동합니다. 후속 컨트롤러 코드는 아직 작성되지 않았습니다.

기사 저장을 구현하려면 먼저 데이터베이스를 구성하고, 데이터 테이블을 생성하고, 모델을 생성한 다음 저장 로직 코드를 완성해야 합니다.

1. 데이터베이스 구성

.env 파일 수정

2. 데이터 테이블 생성

artisan 명령을 사용하여 마이그레이션 생성:

php artisan make:migration create_articles_talbe --create=articles
로그인 후 복사

마이그레이션 파일 수정

public function up() 
 {
  Schema::create('articles', function (Blueprint $table) {
   $table->increments('id');
   $table->string('title');
   $table->longText('content');
   $table->timestamps();
  });
 }
public function down() 
 {
  Schema::dropIfExists('articles');
 }
로그인 후 복사

다음을 포함하는 기사 테이블을 생성했습니다. 증가된 ID 필드, 문자열 제목 필드, 긴 텍스트 콘텐츠 필드 및 타임스탬프.

데이터베이스 마이그레이션 수행:

php artisan migrate
로그인 후 복사

mysql에 로그인하고 데이터 테이블을 봅니다.

3. 모델 만들기

artisan 명령을 사용하여 모델을 만듭니다.

php artisan make:model Article
로그인 후 복사

모델 파일을 열고 다음 코드를 입력합니다.

app/Article.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model 
{
 //对应的表
 protected $table = 'articles';
 //通过model可以写入的字段
 protected $fillable = [
  'title', 'content',
 ];
}
로그인 후 복사

4 로직 코드를 저장합니다. ArticlesController.php 컨트롤러를 열고 store() 메소드를 찾으세요.

app/Http/Controllers/ArticlesController.php

 public function store(Request $request)
 {
  //数据验证 错误处理
  $this->validate($request,[
   'title'=>'required|max:50',
   'content'=>'required|max:500',
   ]);
  // 1 orm方式写入
  $article = Article::create([
   'title'=>$request->title,
   'content'=>$request->content,
   ]);
  //2 或者
  /* $article = new Article();
   $article->title =$request->title;
   $article->content = $request->content;
   $article->save();*/

   //3 db方式写入
   //insert()方法返回值为true 和 false
   //$res = DB::table('articles')->insert(['title'=>$request->title,'content'=>$request->content]);
  return redirect()->route('blog.index');
 }
로그인 후 복사
확인 오류 표시

@if (count($errors) > 0)
 <p class="alert alert-danger">
  <ul>
   @foreach($errors->all() as $error)
   <li>{{ $error }}</li>
   @endforeach
  </ul>
 </p>
@endif
로그인 후 복사
VII. 기사 목록 표시

기사 추가 기능을 완료한 후 기사 목록 표시 페이지를 구현할 수 있습니다.

ArticlesController.php를 열고 index() 메소드를 찾은 후 다음과 같은 코드를 추가하세요.

app/Http/Controllers/ArticlesController.php

use App\Article;

public function index() 
 {
  $articles = Article::orderBy('created_at','asc')->get();

  return view('articles.index', ['articles'=>$articles]);
 }
로그인 후 복사
View index.blade.php

@extends('layouts.art')
@section('content')

 <a class="btn btn-primary" href="{{route(&#39;blog.create&#39;)}}" rel="external nofollow" >添加文章</a>


 @foreach($articles as $article)
 <p class="panel panel-default">
 <p class="panel-body">
 {{$article->title}}
 <a href="{{route(&#39;blog.show&#39;,$article->id)}}" rel="external nofollow" class="btn btn-info">阅读</a>
 <a href="{{route(&#39;blog.edit&#39;, $article->id)}}" rel="external nofollow" class="btn btn-info">修改</a>

  <form action="{{ route(&#39;blog.destroy&#39;, $article->id) }}" method="post" style="display: inline-block;">
   {{ csrf_field() }}
   {{ method_field('DELETE') }}
   <button type="submit" class="btn btn-danger">删除</button>
  </form>
 </p>
 </p>
 @endforeach

 {!! $articles->render() !!}
 @endsection
로그인 후 복사
8 기사 양식 편집.

기사 양식 편집 실제로 기존 데이터를 읽고 양식에 채워야 한다는 점을 제외하면 이전에 작성된 새 기사 양식과 매우 유사합니다.

먼저 기사 목록 페이지의 각 기사에 편집 버튼을 추가합니다.

보기:

@extends('layouts.art')
@section('content')

 <form class="form-horizontal" method="post" action="{{route(&#39;blog.update&#39;,$article->id)}}">
   {{ csrf_field() }}
  {{ method_field('PATCH') }}
 <p class="form-group">
 <label for="inputEmail3" class="col-sm-2 control-label">标题</label>
 <p class="col-sm-10">
  <input type="title" class="form-control" id="title" name="title" value="{{ $article->title }}">
 </p>
 </p>


 <p class="form-group">
 <label for="inputEmail3" class="col-sm-2 control-label">内容</label>
 <p class="col-sm-10">
  <textarea class="form-control" rows="5" id="content" name="content"> {{ $article->content }}</textarea>
 </p>
 </p>


 <p class="form-group">
 <p class="col-sm-offset-2 col-sm-10">
  <button type="submit" class="btn btn-default">修改</button>
 </p>
 </p>
</form> 
@endsection
로그인 후 복사
이 코드에서 {{ method_field('PATCH') }}에 주목하세요. 이는 크로스 사이트 메서드 위조, HTML입니다. 양식은 PUT, PATCH 또는 DELETE 작업을 지원하지 않습니다. 따라서 HTML 양식에서 정의된 PUT, PATCH 또는 DELETE 경로를 호출할 때 숨겨진 _method 필드를 양식에 추가하여 메서드를 위조해야 합니다. 자세한 내용은 공식 문서를 참조하세요.

Controller

//展示修改模板
public function edit($id) 
 {
  $article = Article::findOrFail($id);
  return view('art.edit',['article'=>$article]);
 }
//执行修改
public function update(Request $request, $id) 
 {
  $this->validate($request, [
   'title' => 'required|max:50',
   'content'=>'required|max:500',
  ]);

  $article = Article::findOrFail($id);
  $article->update([
   'title' => $request->title,
   'content' => $request->content,
  ]);

   return redirect()->route('blog.index');
 }
로그인 후 복사
9. 기사 삭제

삭제 버튼

 <form action="{{ route(&#39;blog.destroy&#39;, $article->id) }}" method="post" style="display: inline-block;">
   {{ csrf_field() }}
   {{ method_field('DELETE') }}
   <button type="submit" class="btn btn-danger">删除</button>
  </form>
로그인 후 복사

Controller:

public function destroy($id) 
 {
  $article = Article::findOrFail($id);
  $article->delete();
  return back();
 }
로그인 후 복사
10. 결론

이 실험은 Laravel RESTful 리소스 컨트롤러 및 라우팅, 뷰, orm을 집중적으로 분석합니다. 수업 과정.

관련 권장 사항:

V족 블로그 관리 플랫폼의 Vue+SpringBoot 개발에 대한 자세한 설명 예

LAMP PHP 모듈 기반 개인 블로그 구축에 대한 자세한 그래픽 설명

PHP로 간단한 블로그 만드는 방법

위 내용은 Laravel에서 미니 블로그 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿