簡體   English   中英

如何為帖子創建類別標簽? 我正在使用 laravel 8

[英]How to create category tags for posts? I am using laravel 8

我試圖允許用戶在表單中創建帖子時創建類別標簽並將其添加到帖子中。

我還希望這些標簽出現在配置文件視圖中,並將 function 作為過濾器按鈕,以根據它們擁有的標簽名稱顯示帖子。

然而,在我試圖實現這個整體結果的過程中,我被卡住了,因為每次我提交帶有標簽的帖子時,標簽數組在視圖中一直顯示為空。

我的帖子表是:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->string('caption');
            $table->string('url');
            $table->string('image');
            $table->text('tags');
            $table->timestamps();

            $table->index('user_id');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

我的帖子 Model 是:

<?php

namespace App\Models;

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

class Post extends Model
{
    use \Conner\Tagging\Taggable;
    use HasFactory;

     protected $fillable = ['caption','url','image', 'tags'];

    public function user()
    {
      return $this->belongsTo(User::class);
    }

    protected $dates = [
        'created_at',
        'updated_at',
    ];

}

我在 PostsController 中的創建和存儲方法是:

public function create()
  {
      return view('posts.create');
  }

  public function store(Request $request)
  {
      $data = request()->validate([
        'caption' => 'required',
        'url' => 'required',
        'image' => ['required', 'image'],
        'tags' => 'required',
      ]);

      $tags = explode(", ", $request->tags);


      $imagePath = request('image')->store('uploads', 'public');

      auth()->user()->posts()->create([
        'caption' => $data['caption'],
        'url' => $data['url'],
        'image' => $imagePath,
        'tags' => $data['tags'],
      ]);

      return redirect('/users/' . auth()->user()->id);

  }

我創建帖子的表格是:

<form action="/posts" enctype="multipart/form-data" method="post">
      @csrf

      <div class="form-group">
          <label for="caption" class="create_caption_label">Post Caption</label>

          <div class="create_caption_div">
              <input id="caption"
              type="text"
              class="form-control @error('caption') is-invalid @enderror"
              name="caption"
              value="{{ old('caption') ?? '' }}"
              autocomplete="caption" autofocus>

              @error('caption')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="form-group">
          <label for="tags" class="create_tags_label">Tags</label>

          <div class="create_tags_div">
              <input id="tags"
              type="text"
              data-role="tagsinput"
              class="form-control @error('tags') is-invalid @enderror"
              name="tags"
              value="{{ old('tags') ?? '' }}"
              autocomplete="tags" autofocus>

              @error('tags')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="form-group">
          <label for="url" class="edit_title_label">URL</label>

          <div class="edit_url_div">
              <input id="url"
              type="text"
              class="form-control @error('url') is-invalid @enderror"
              name="url"
              value="{{ '' }}"
              autocomplete="url" autofocus>

              @error('url')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="create_post_image_div">
        <label for="image" class="create_image_label">Post Image</label>
        <input type="file" class="form-control-file" id="image" name="image">

        @error('image')
        <div class="invalid-feedback-div">
          <strong>{{ $message }}</strong>
        </div>
        @enderror

        <div class="create_post_btn_div">
          <button class="create_post_btn">Save Post</button>
        </div>
      </div>

    </form>

最后,我的觀點是:(這是提交帖子后標簽數組顯示為空的地方)

@foreach( $user->posts as $post )
                  <div class="carousel_posts_container">

                    <div class="post_date_and_edit_div">
                      <div class="posted_date_div">
                        <p class="posted_date">posted: {{ $post->created_at->diffForHumans() }}</p>
                      </div>

                      <div class="post_edit_div">
                        <form action="/posts/{{$post->id}}/edit">
                          <input class="post_edit_btn" type="submit" value="• • •">
                        </form>
                      </div>
                    </div>

                    <div class="post_counter_div">
                      <p class="post_counter">1 like</p>
                    </div>

                    <div class="post_counter_div">
                      <p class="post_counter">1 comment</p>
                    </div>


                    <div class="carousel_post_img_div">
                      <img src="/storage/{{ $post->image }}" class="carousel_img_placeholder">
                    </div>


                    <div class="like_comment_view_container">

                      <div class="view_btn_div">
                        <form action="{{$post->url}}">
                          <input class="like_comment_view_btns" type="submit" value="( View Post )">
                        </form>
                      </div>
                      <div class="like_btn_div">
                        <button type="button" class="like_comment_view_btns">( Like )</button>
                      </div>
                      <div class="comment_btn_div">
                        <button type="button" class="like_comment_view_btns">( Comment )</button>
                      </div>

                    </div>

                    <div class="carousel_caption_container">

                      <div class="carousel_caption_div">
                        <p class="carousel_caption_username">{{$user->username}} - {{$post->caption}}</p>
                        <p class="carousel_caption">{{$post->caption}}</p>
                      </div>

                      <div class="post-tags mb-4">
                        <strong>Tags : </strong>
                        @foreach($post->tags as $tag)
                        <span class="badge badge-info">{{$tag->name}}</span>
                        @endforeach
                      </div>

                    </div>

                  </div>
                  @endforeach

我該如何解決這個問題?

此外,我怎樣才能允許標簽 function 作為過濾按鈕根據他們擁有的標簽名稱顯示帖子?

您可以將標簽保存為數據庫中的 json 數組。 然后在 model 中轉換為數組,這樣當你檢索時它會自動數組。 保存時,您會將標簽作為數組傳遞,然后它將自動轉換為 json 字符串。

protected $casts = [
    'tags' => 'array',
];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM