Laravelでミニブログを構築する

小云云
リリース: 2023-03-19 17:06:01
オリジナル
1309 人が閲覧しました

この記事では主に、laravel を使用してミニブログを構築するための関連情報を紹介します。この記事では、サンプルコードを通じて段階的な実装手順が詳しく説明されています。みんなを助けることができる。

1. デザインとアイデア

コードの最初の行を書き始める前に、作成したり修正したり、不要なコードをさらに書いたりすることを避けるために、最初から最後まで作りたい製品を設計するために最善を尽くす必要があります。

  • 要件分析: ミニブログには少なくとも、記事の追加/編集/表示/削除、および記事リストの表示機能が含まれている必要があります。

  • データベース分析: この関数に基づいて、記事を保存するために必要なのは Articles データ テーブルのみです。

  • ページ構造分析: テンプレートの継承を使用して、ヘッダー/記事リスト/下部情報を含む基本テンプレートを作成する必要があります

次に、ルートを作成します

このブログを完成させるには、おそらく次のルートが必要です。

| 記事一覧ページへ戻る | | 新しい記事ページに戻る | 記事ページのルートを表示 | 記事の編集ページに戻る | | 記事を取り出して更新し、データベースに再保存する | 記事の関数ルーティングをデータベースから削除する |

この状況に対して、Laravel はほぼすべての記事のデータ操作ルートを提供していることがわかります。非常に便利な方法: RESTful リソース コントローラーとルーティング。

routes.php を開いて、次のコードを追加します。

Route::resource('articles', 'ArticlesController');
ログイン後にコピー

上記のコード行のみが、次の 7 つのルートを作成するのと同等であり、それらはすべて Route('articles.show') のような名前を付けられます。使用法。

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]);
 }
ログイン後にコピー
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. 記事フォームを編集します


記事フォームの編集 実際、これは以前に作成した新しい記事フォームと非常によく似ていますが、既存のデータを読み取ってフォームに入力する必要がある点が異なります。

まず、記事リスト ページの各記事に編集ボタンを追加します:

View:

@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 アクションをサポートしていません。したがって、定義された PUT、PATCH、または DELETE ルートを HTML フォームから呼び出す場合は、メソッドを偽装するためにフォームに非表示の _method フィールドを追加する必要があります。詳細については、公式ドキュメントを参照してください。

コントローラー

//展示修改模板
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>
ログイン後にコピー
コントローラー:

public function destroy($id) 
 {
  $article = Article::findOrFail($id);
  $article->delete();
  return back();
 }
ログイン後にコピー
10. 結論

この実験は、Laravel RESTful リソースコントローラーとルーティング、ビュー、orm を集中的に分析するために使用します。演習。

関連する推奨事項:

V族ブログ管理プラットフォームのVue+SpringBoot開発の例の詳細な説明

LAMP PHPモジュールに基づいて個人ブログを構築する詳細なグラフィック説明

で簡単なブログを作成する方法PHP

以上がLaravelでミニブログを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート