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

فرم در لاراول

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

     @foreach(App\Models\Blog\Blog::all() as $blog)
                <li><a href="https://roocket.ir/{{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="https://roocket.ir/{{route('blog.blogs.index')}}"><span>❯</span>نوشته‌های پیشین</a></li>
@endforeach

ثبت پرسش جدید
m.mahmoudi
m.mahmoudi
@m.mahmoudi72763 سال پیشمطرح شد
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="https://roocket.ir/{{route('blog.singlepost', $blog->id)}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>

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


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

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


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

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


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

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

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

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


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

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

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

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

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


m.mahmoudi
m.mahmoudi
@m.mahmoudi72763 سال پیشمطرح شد
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="https://roocket.ir/{{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
@rezajahangir3 سال پیشمطرح شد
0

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

<a href="https://roocket.ir/{{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.mahmoudi
@m.mahmoudi72763 سال پیشمطرح شد
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="https://roocket.ir/{{route('blog.singlepost', $blog->id)}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>

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


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

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


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

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


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

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


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

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


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

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