اذهب إلى المحتوى

السؤال

نشر (معدل)

مرحباً، أقوم بإنشاء مشروع يمكّن المستخدم من إضافة الدوريّات، والفرق المشاركة فيها، وحالتها. تقريباً إنتهيت من كل شيء، ولكن عندما أختار إحدى الفرق لتعديلها بتغيير إسمها وحالتها، يظهر لي هذا الخطأ.

App\Http\Controllers\TeamController::update(): Argument #2 ($team) must be of type App\Models\Team, App\Models\Tournament given, called in C:\xampp\htdocs\__laravel\int_football\vendor\laravel\framework\src\Illuminate\Routing\Controller.php on line 54

صفحة الفرق 

2022-04-11.thumb.png.736a44339b5a38db19b9eb9283a3727c.png

صفحة الفريق المختار

6253ce70aed87_2022-04-11(1).png.8ecc477188a3ef3700b461866a4e79f9.png

الكود

<h1>

  <a href="/tournament/{{$tournament->id}}/show">back</a>

</h1>

<form action="/edit/{{$tournament->id}}/team/{{$team->id}}/update" method="POST">

  @csrf

  @method('PUT')

  <input type="text" name="name" id="" value="{{$team->name}}">

  <select name="status" onchange="this.form.submit()">

    <option value="unknown" {{($team->status == 'unknown')?'selected':""}}>unknown</option>

    <option value="qualified" {{($team->status == 'qualified')?'selected':""}}>qualified</option>

    <option value="didn't qualify" {{($team->status == "didn't qualify")?'selected':""}}>didn't qualify</option>

  </select>

  <button type="submit">edit</button>

</form>

صفحة التوجيه

Route::get('/edit/{tournament}/team/{team}',[TeamController::class,'edit']);

Route::put('/edit/{tournament}/team/{team}/update',[TeamController::class,'update']);

laravel__int_football.sql

int_football.zip

تم التعديل في بواسطة عبود سمير
وضع الأكواد في مكانها و توضيح السؤال

Recommended Posts

  • 0
نشر

تُخبرك رسالة الخطأ ان الوسيط الثاني في التابع update و المسمى team يجب أن يكون نوعه App\Models\Team لكن عند التنفيذ تبين أن النوع هو App\Models\Tournament يجب إحترام الترتيب بما أنك كتبت المسار بهذا الشكل:

Route::put('/edit/{tournament}/team/{team}/update',[TeamController::class,'update']);

يجب أن يكون المعامل الأول هو tournament و نوعه Tournament و المعامل الثاني team و نوعه Team بهذا الشكل:

public function update(Request $request, Tournament $tournament, Team $team)

و ليس

public function update(Request $request, Team $team, Tournament $tournament)

أيضا لديك خطأ في القاعدة required كتبت require، و لديك مُشكلة عند تعديل حالة الفريق يتم إرسال الإستمارة مباشرةً حاول إصلاحها.

  • 0
نشر

يجب الانتباه الى ترتيب ال params اثناء الاستدعاء .

كما ترى فوق update function ، يتوقع منك object من Team model ، ولكن أنت قمت بتمرير object من Tournament model .

أعد ترتيب الاستدعاء في update function كما هو في ال route .

مثل هذا :

// web File

Route::get('/edit/{tournament}/team/{team}',[TeamController::class,'edit']);

// TeamController (Update Function)
public function update(Request $request,Tournament $tournament ,Team $team) {
	// Your Code
}

او في حال كان لديك أكثر من متغير في route ، لتفادي مشكلة ترتيب المتغيرات يمكنك تمرير object من ال model الذي تتعامل معه من خلال construct function

كما هو بالمثال :

public $team;

public function __construct(Team $team)
{
        $this->team = $team;
}

هكذا يمكنك أن تتعامل مع team object في كل الملف .

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...