دوره زبان تخصصی برای برنامه‌نویسان (هدیه ویژه ثبت‌نام در دوره‌های متخصص) (فرصت محدود ⏰)
۰ ثانیه
۰ دقیقه
۰ ساعت
۲۳ Mahdi
مشکل در پیدا کردن مسیر
جامعه لاراول ایجاد شده در ۰۶ فروردین ۱۴۰۲

سلام

روت صفحه سبد خرید ایجاد کردم و دادمش به nav بارمون وقتی کلیک میکنم روت مسیر گم میکنه

debug به شکل‌ها مختلف انجام دادم optimize clear کردم و .. کلاس کنترلر رو عوض کردم فایده نداشت

ی برنامه لاراولی جدید ایجاد کردم و باز به این مرحله ک رسیدم همون داستان پیش اومد

قریب به احتمال مشکل در tmp ی هست ک استاد بمون دادن و برای امتحان اونو عوض میکنم

سوروس رو در گیت گذاشتم

https://github.com/mehdi-1995/payment

و برای انتقاد

تا الان از اکثر سوال هایی ک پرسیدم جواب درست نگرفتم و یا بشون جواب داده نشد و فقط وقتم رو برای ایجاد تاپیک هدر دادم امیدوارم برای این تاپیک اینطور نباشه

سلام مهدی عزیز

من پروژت رو بررسی که کردم روت‌های سبد خرید نبود و در لینک هم روت رو نداده بودی:

<a href="route ro pas nadadi" class="btn btn-info mr-2">
            @lang('payment.basket') <span class="badge badge-light">{{ $Basket->itemCount() }}span>
        a>
Route::prefix('products')->group(function () {
    Route::get('', [ProductController::class, 'index'])->name('products.index');
    Route::get('{product}', [ProductController::class, 'add'])->name('products.add');
});
احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۳:۵۶

احتمالا برا debug پاکشون کردم بعد بالا فرستادمشون شما بیزحمت اضافه کن

نتیجه شو بم بگو


Mahdi ۰۶ فروردین ۱۴۰۲، ۱۴:۰۰

هر روتی تعریف مکینم با هر کلاس یا متدی not found میزنه

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۴:۰۷

تست کردم اوکی بود:

Route::get('basket', function () {
    return view('welcome');
})->name('basket.index');
<a href="{{route('basket.index')}}"  class="btn btn-info mr-2">
		@lang('payment.basket') <span class="badge badge-light">{{$Basket->itemCount()??0}}span>
	a>

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

احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۴:۱۹

مجددا ریپازیتوریمو اپدیت کردم بیزحمت اونم چک کن

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۴:۴۰

داخل روتر روت ایندکس رو زدی:

Route::get('basket', [BasketController::class, 'index'])->name('basket.index');

داخل ویو نام add رو زدی باید index باشه:

کد شما:

"{{ route('basket.add') }}" class="btn btn-info mr-2">
	      @lang('payment.basket') "badge badge-light">{{ $Basket->itemCount() }}span>
	    a>

کد درست:

"{{ route('basket.index') }}" class="btn btn-info mr-2">
	      @lang('payment.basket') "badge badge-light">{{ $Basket->itemCount() }}span>
	    a>
احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۵:۰۸

گیت هاب چک کردم روتهام درسته

شما کجا رو چک میکنی؟

https://github.com/mehdi-1995/payment

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۵:۱۳

روتها درسته

نام روت رو اشتباه پاس دادید:

https://github.com/mehdi-1995/payment/blob/main/resources/views/partials/navbar.blade.php

احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۵:۲۰

layout من ک این navbar رو نداره

شما باید این دوجا رو نگاه کنی?

https://github.com/mehdi-1995/payment/blob/main/resources/views/layouts/app.blade.php

https://github.com/mehdi-1995/payment/blob/main/routes/web.php

دایرکتوری partials ک استفاده نکردم


Mahdi ۰۶ فروردین ۱۴۰۲، ۱۵:۲۹

برای رفع مشکل باید پروژه من pull کنید بعد رو سیستمتون debug ش کنید ن فایل‌ها رو تو گیت نگاه کنید

عجیبه.........

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۵:۳۴

مهدی عزیز

شما وقتی تاپیک میزنی باید کامل مشکل رو توضیح بدی

بنظرم اینقد که تمرکزت روی ایرادگیری هست روی کدت باشه.

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

بنظرم دقتت رو بیشتر کن تا اینچنین موارد ساده ای رو اشتباه نکنی.

تسلطط به روتینگ کم هست و چنین مورد ساده ای رو اشتباه کردی(عجیبه!):

Route::prefix('products')->group(function () {
    Route::get('', [ProductController::class, 'index'])->name('products.index');
    Route::get('/basket', [BasketController::class, 'index'])->name('basket.index');
    Route::get('{product}', [ProductController::class, 'add'])->name('products.add');
});

گروه پروداکت رو باید به این شکل تغییر بدی که وارد بایدینگ نشه({product}) و به مشکل نخوری!

احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۵:۴۰

اینکه من اماتورم شکی درش نیست

ولی من بالا کامل توضیح دادم مثل تاپیک‌های قبلی

و این تیکه گروه پروداکت رو باید به این شکل تغییر بدی که وارد بایدینگ نشه({product}) و به مشکل نخوری!

یعنی چی

{} این براکتا رو ما میزاریم برای دادن پارامتر ک انجامم دادم

در ثانی خود م شک داشتم برای بایدینگ بخاطر همین ی پروژه دیگه بالا اوردم خام خام اونجاهم تا ویو basket بش دادم not found زد

Route::prefix('products')->group(function () {
    Route::get('', [ProductController::class, 'index'])->name('products.index');
    Route::get('{product}', [ProductController::class, 'add'])->name('products.add');
    Route::get('basket', [BasketController::class, 'index'])->name('basket.index');
});
Mahdi ۰۶ فروردین ۱۴۰۲، ۱۵:۴۸

الان دو ساعته دارم روش کار میکنیم ببینم چی شده از طرفی هم شما کمکی نمیکنی اگه میدونید لازمه بیاید رو سیستمم با any desk ولی اینکه من مرتب بیام اهنمایی تون کنم اذیت کنندس

بلاخره اگه شما پروژه رو pull میکردی متوجه میشدی

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۵:۵۰

در حالتی که شما قرار داده بودی میومد هر آدرسی بعد از /products زده میشد رو به عنوان روت لاین دوم گروه شناسایی میکرد و به متد add در کنترلر ارسال میشد و مانع اجرای بقیه روتها میشد چون لاین بالاتر بود و قبل از اون روت این اجرا میشد.

پس باید به آخر روت‌های گروه انتقال داده بشه تا مشکل حل بشه و سایر روت‌ها قبل از این اد شده باشند.

بهترین پاسخ
احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۵:۵۲

الان جواب گرفتم مهندس

متوجه هم نشدم داستانی رو ک گفتید

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

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۵:۵۵

در مبحث morph‌ها استاد اومدن از bind استفاده کردن

ولی اونجا ما به لاراول میگفتیم در صورت دیدن این کلمه یا هرچی دیگه بیا بچسبونش به فلان چیز

در صورتیکه الان در بایند ما اشاره ای به پروداکت نکردیم

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۵:۵۸

بزار یجور دیگه بگم:

منظورم از باید پارامتر دادن به روت و جایگزینی آدرس فراخوانی شده به جای {products} روت بود

شما وقتی یه روت میزنید در لاراول ذخیره میشه و با فراخونی یک آدرس لاراول طبق اون آدرس روت رو در اختیار کاربر قرار میده!

فکر کن روت‌ها در قالب یک آرایه به این صورت ذخیره شده در لاراول:

$routes=[
'/products',
'/products/{product}',
'/products/basket'
];

الان ایندکس دوم آرایه زودتر از ایندکس سوم بررسی میشه و آدرسی هم که کاربر میزنه با مورد دوم تطابق داره دیگه!

پس میاد هرچی هست رو جزو اون حساب میکنه و ایندکس سوم به طوری میشه گفت اضافه نمیشه!

احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۶:۰۳

در پروژه جامع در مورد متدهای show/delete/update چنین مشکلی نداشتیم؟

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۶:۱۱

خیر.

احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۶:۱۴

پس چراش جا افتاد

پس چراش در پروژه جامع در مورد متدهای show/delete/update چنین مشکلی نداشتیم؟

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

Route::get('products/{product}', [ProductController::class, 'add'])->name('products.add');
Route::get('products', [ProductController::class, 'index'])->name('products.index');
Route::get('products/basket', [BasketController::class, 'index'])->name('basket.index');

برای روت دوم مشکلی نداریم و فقط برای روت سوم مشکل بوجود میاد

اینا روت‌های پروژه video shear ما هستن

Route::get('categories/{category:slug}/videos', [CategoryVideoController::class, 'index'])->name('category.video');
Route::post('videos/{video}/comment', [CommentController::class, 'store'])->name('video.comment');
Route::get('{likeable_type}/{likeable_id}/like', [LikeController::class, 'create'])->name('like.create');
Route::get('{likeable_type}/{likeable_id}/dislike', [DisLikeController::class, 'create'])->name('dislike.create');
Route::middleware('auth')->group(function () {
    Route::prefix('videos')->group(function () {
        Route::get('create', [VideoController::class, 'create'])->name('videos.create');
        Route::post('', [VideoController::class, 'store'])->name('videos.store');
        Route::get('{video}', [VideoController::class, 'show'])->name('videos.show');
        Route::get('{video}/edit', [VideoController::class, 'edit'])->name('videos.edit');
        Route::put('{video}', [VideoController::class, 'update'])->name('videos.update');
    });
});

ک چنین مشکلی برای همدیگه درست نکردن

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۸:۱۱

چون از وجود اومدن این تداخل جلوگیری شده و روت‌ها درست پیاده شدند.

احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۸:۳۷

حالا ما برای جلوگیری از این خطا باید چیکار کنیم ؟

Mahdi ۰۶ فروردین ۱۴۰۲، ۱۸:۳۹

عرض کردم

روت‌ها رو درست ایجاد کنید.

احمدرضا فاطمی کیا ۰۶ فروردین ۱۴۰۲، ۱۹:۲۴