m.mahmoudi
2 سال پیش توسط m.mahmoudi مطرح شد
12 پاسخ

فرم در لاراول

با سلام همونطور که مشخص هست من یک foreach گذاشتم تا به مشخصات بلاگ دسترسی داشته باشم اما طوری شده که مثلا 3 تا بلاگ درست میکنم
ویراش
نظرات تایید نشده
اخرین نظرات
نوشته های پیش رو
سه بار زیر هم مینویسه و 4 تا پست میشه 4 بار تکرار میکنه.
در حالی که من فقط یک بار میخوام اینها تو ساید بار دیده بشن.
از foreachهم استفاده نکردنی اصلا به اطلاعات نمیشه دسترسی پیدا کرد

     @foreach(App\Models\Blog\Blog::all() as $blog)
                <li><a href="{{route('blog.blogs.edit',['blog'=>$blog->id])}}"><span>❯</span>ویرایش </a></li>
                <li><a href=""><span>❯</span>نظرات تایید نشده</a></li>
                <li><a href=""><span>❯</span>آخرین نظرات</a></li>
               <li><a href="{{route('blog.blogs.index')}}"><span>❯</span>نوشته‌های پیشین</a></li>
@endforeach

ثبت پرسش جدید
m.mahmoudi
@m.mahmoudi7276 2 سال پیش مطرح شد
0

همچنان کار نکرد.
تست که میکنم متد ارایه خالی برمیگردونه.
public function singlepost(Blog $blog){
return view('blog.singlepost', compact('blog'));
}
و هیچ چیز به ویو ارسال نمیشه مگر بیام از for each استفاده کنم.

روت
Route::get('morepost', [\App\Http\Controllers\Blog\BlogController::class, 'morepost'])->name('morepost');
Route::get('singlepost/{id}', [\App\Http\Controllers\Blog\BlogController::class, 'singlepost'])->name('singlepost');
کنترلر
   public function morepost(Request $request,Blog $blog){
        return view('blog.morepost',compact('blog'));
    }
    public function singlepost(Blog $blog){
        return view('blog.singlepost', compact('blog'));
    }
    <a href="{{route('blog.singlepost', $blog->id)}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>

من لیست کل پست ها رو دارم حتی با کلیک به روی "بیشتر" وارد ایدی مربوطه میشم.اما مساله اینجاست که اگر تو ویو سینگل از foreachاستفاده کنم دوباره کل پست ها رو میاره و اگر از foreachاستفاده نکنم کلا هیچ کدوم از پست ها رو نشون نمیده.


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

سلام به شما دوست عزیز.
خب اصلا دلیل گذاشتن foreach داخل سایدبار رو متوجه نشدم.


m.mahmoudi
@m.mahmoudi7276 2 سال پیش آپدیت شد
0

اگر foreachقرار ندم چطوری به ایدی بلاگ تو لینک ویرایش دسترسی داشته باشم؟


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

این که داره به تعداد بلاگ ها تکرار میشه یه چیز طبیعیه، چون شما داری به تعداد بلاگ ها این حلقه رو پیمایش میکنی.
شما نباید حلقه رو داخل ساید بار بذارید، شما یه روت index دارین واسه نمایش بلاگ ها درسته؟ اگه جواب بله هست، کد زیر میشه لینکی برای نمایش کل بلاگ ها پس شما کد زیر رو بدون حلقه بذار داخل ساید بار:

<li><a href="{{route('blog.blogs.index')}}"><span>❯</span>نوشته‌های پیشین</a></li>

حالا باید داخل این صفحه مثلا یه table داشته باشی که کل بلاگ ها رو نشون بده و حلقه رو اینجا بذاری.
موفق باشید.


m.mahmoudi
@m.mahmoudi7276 2 سال پیش آپدیت شد
0

نه ببینید بخوام واضح بگم به این شکل هست که من میخوام به id edit دسترسی داشته باشم برای دسترسی به idوقتی میام از foreachاستفاده میکنم بسته به تعداد بلاگ هام چندین گینه ویرایش زیر هم میاره که هر کدوم به یک بلاگ ربط داره
وقتی هم از foreachاستفاده نمیکنم اصلا $blog رو نمیشناسه.

 @foreach(App\Models\Blog\Blog::all() as $blog)
                <li><a href="{{route('blog.blogs.edit',['blog'=>$blog->id])}}"><span>❯</span>ویرایش </a></li>
                @endforeach

 تصویر

من که به بلیدها نگاه میکنم میبینم گاهی بدون هیچ foreach به یک فیلد دسترسی پیدا میکنند و نمیدونم چطور همچین ممکنه
.
فعلا برای اینکه قسمت ساید بارم شلوغ نشه اخرین سطر رو گرفتم که اخرین بلاگ رو نشون بده.

    @foreach(App\Models\Blog\Blog::all() as $blog)
                    @if($loop->last)
                  <li><a href="{{route('blog.blogs.edit',['blog'=>$blog->id])}}"><span>❯</span>ویرایش </a></li>
                    @endif
                @endforeach

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

مگه نمیخواین لیست تمام بلاگ ها رو داشته باشین و هر کدوم رو که خواستین ویرایش کنید؟


m.mahmoudi
@m.mahmoudi7276 2 سال پیش مطرح شد
0

آقای جهانگیر واقعا ممنونم از پیگیری شما.
من تو استفاده از متغییرها تو بلید به مساله میخورم که یک چیز برام قابل فهم نیست
ببینید من کلی پست دارم که با این شکل همشون رو به من نشون میده.

روت:
Route::get('morepost', [\App\Http\Controllers\Blog\BlogController::class, 'morepost'])->name('morepost');
کنترلر
    public function morepost(Request $request,Blog $blog){
        return view('blog.morepost',compact('blog'));
    }
ویو
@extends('blog.master')
@section('content')
    @foreach(App\Models\Blog\Blog::all() as $blog)
        <div class="container mb-2">
            <div class="row justify-content-center">
                <div class="col-md-12">
                    <div class="card">
                        <div class="card-header">
                            {{$blog->title}}
                        </div>
                        <div class="card-body">
                            {{$blog->body}}
                        </div>
                    </div>
                </div>
            </div>
            <div class="row">
                <a href="{{route('blog.singlepost',['blog'=>$blog->id])}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>
            </div>
        </div>
    @endforeach
@endsection

حالا من میخوام وقتی روی بیشتر زدم وارد فقط یک بلاگ بشه.
مساله من دقیقا اینجا هست که من تو صفحه سینگل پست نمیتونم از متغیرها استفاده کنم مگر اینکه از foreach استفاده میکنم که کل پست ها رو برام میاره که من اینو نمیخوام.هرجا هم نگاه میکنم اصلا از foreach استفاده نمیکنند و مستقیم به مثلا $blog دسترسی دارند.من باید از چه راهی برم.
راه اشتباه من به شکل زیر هست.

روت
Route::get('singlepost', [\App\Http\Controllers\Blog\BlogController::class, 'singlepost'])->name('singlepost');

کنترلر
  public function singlepost(Request $request,Blog $blog){
        return view('blog.singlepost');
    }
@extends('blog.master')

@section('content')
    @foreach(App\Models\Blog\Blog::all() as $blog)
        <div class="modal fade" id="sendComment">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title" id="exampleModalLabel">ارسال نظر</h5>
                        <button type="button" class="close mr-auto ml-0" data-dismiss="modal">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <form action="{{route('send.comment')}}" method="post" id="sendCommentForm">
                        @csrf
                        <div class="modal-body">
                            <input type="hidden" name="commentable_id" value="{{$blog->id}}">
                            <input type="hidden" name="commentable_type" value="{{get_class($blog)}}">
                            <input type="hidden" name="parent_id" value="0">

                            <div class="form-group">
                                <label for="message-text" class="col-form-label">پیام دیدگاه:</label>
                                <textarea name="comment" class="form-control" id="message-text"></textarea>
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-dismiss="modal">لغو</button>
                            <button type="submit" class="btn btn-primary">ارسال نظر</button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
        <div class="container">
            <div class="row justify-content-center">
                <div class="col-md-12">
                    <div class="card">
                        <div class="card-header">
                            {{$blog->title}}
                        </div>
                        <div class="card-body">
                            {{$blog->body}}
                        </div>
                    </div>
                </div>
            </div>

            <div class="row">
                <div class="col">
                    <div class="d-flex align-items-center justify-content-between">
                        <h4 class="mt-4">بخش نظرات</h4>
                        @auth
                            <span class="btn btn-sm btn-primary" data-toggle="modal" data-target="#sendComment" data-id="0">ثبت نظر جدید</span>
                        @endauth
                    </div>
                   @guest
                        <div class="alert alert-warning">برای ثبت نظر لطفا وارد سایت شوید.</div>
                    @endguest
                    @include('layouts.comments',['comments'=>$blog->comments()->where('parent_id',0)->get()])
                </div>
            </div>
        </div>
    @endforeach
@endsection

اگر فقط اینکه من چطور بدون استفاده از foreach دسترسی داشته باشم رو بفرمایید مشکل من تو بلیدها خیلی حل میشه


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش آپدیت شد
0

کد شما به شدت کثیف و دلیلش هم اصولی یاد نگرفتن هست، هدف من کمک به شما و امثال شماست، خدایی نکرده قصد بی احترامی ندارم ولی با این روش جلو رفتن نتیجه ای حاصل نمی شود.
و اما جواب شما:
لینک بیشتر رو به صورت زیر بنویسید:

<a href="{{route('singlepost', $blog->id)}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>

روت:

Route::get('singlepost/{blog}', [\App\Http\Controllers\Blog\BlogController::class, 'singlepost'])->name('singlepost');

کنترلر:

public function singlepost(Blog $blog){
    return view('blog.singlepost', compact('blog'));
}

حالا بدون foreach استفاده کنید.
موفق باشید.


m.mahmoudi
@m.mahmoudi7276 2 سال پیش مطرح شد
0

همچنان کار نکرد.
تست که میکنم متد ارایه خالی برمیگردونه.
public function singlepost(Blog $blog){
return view('blog.singlepost', compact('blog'));
}
و هیچ چیز به ویو ارسال نمیشه مگر بیام از for each استفاده کنم.

روت
Route::get('morepost', [\App\Http\Controllers\Blog\BlogController::class, 'morepost'])->name('morepost');
Route::get('singlepost/{id}', [\App\Http\Controllers\Blog\BlogController::class, 'singlepost'])->name('singlepost');
کنترلر
   public function morepost(Request $request,Blog $blog){
        return view('blog.morepost',compact('blog'));
    }
    public function singlepost(Blog $blog){
        return view('blog.singlepost', compact('blog'));
    }
    <a href="{{route('blog.singlepost', $blog->id)}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>

من لیست کل پست ها رو دارم حتی با کلیک به روی "بیشتر" وارد ایدی مربوطه میشم.اما مساله اینجاست که اگر تو ویو سینگل از foreachاستفاده کنم دوباره کل پست ها رو میاره و اگر از foreachاستفاده نکنم کلا هیچ کدوم از پست ها رو نشون نمیده.


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

کدهای قبلی رو ویرایش کردم.
تست کنید.
موفق باشید.


m.mahmoudi
@m.mahmoudi7276 2 سال پیش آپدیت شد
0

اصلا تغییر نکرد
فکر کنم یک سر به بیابون باید بزنم
این شاید خیلی به کار بیاد
GET|HEAD blog/morepost ........................................................................................................... blog.morepost › Blog\BlogController@morepost
GET|HEAD blog/singlepost/{id} ................................................................................................ blog.singlepost › Blog\BlogController@singlepost


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

یا داخل کش گیر کرده یا مشکل از جای دیگس.
به تلگرام بنده پیام بدین.


m.mahmoudi
@m.mahmoudi7276 2 سال پیش مطرح شد
0

ارسال شد.
ممنون از شما


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام