实例变量中的空数组

empty array in instance variable

我正在学习 laravel 并且正在关注来自 laracasts 的一些视频,但是我在显示来自控制器的数据时遇到问题,我没问题,但仍然显示我是空数组,实例 Card 不是工作,这是我的代码:

型号: Card.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Card extends Model
{
    //
}

路线:

Route::get('cards/{card}', 'CardsController@show');

卡片控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Card;
use App\Http\Requests;
use App\Http\Controllers\Controller;



class CardsController extends Controller
{

    public function show(Card $card)
    {
        return $card;
        //$card = Card::find($card);
        //return view('cards.show', compact('card'));
    }
}

首先,您需要将可填充的受保护 属性 添加到您的 Eloquent 模型中!现在,进入精彩部分。

在你的路由文件中你有

Route::get('cards/{card}', 'CardsController@show');

简而言之,这段代码会将卡片 ID 传递给 CardsController class 中的显示函数。例如。对于这条路线:https://example.com/cards/5,它实际上会像这样调用函数 show:show(5)。在您的代码中,您将 show 参数类型提示为 Card。 这是错误的。这将是一个整数。

因此,您真正需要做的是检查此ID是否存在,然后将相关信息传递给您的视图。像这样:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Card;
use App\Http\Requests;
use App\Http\Controllers\Controller;



class CardsController extends Controller
{

    /**
     * Show the relevant card information
     * 
     * @param $card This is the card ID (its an integer)
     */
    public function show($card)
    {
        $card = Card::findOrFail($card);
        return view('cards.show')->with(compact('card'));
    }
}

您正在尝试的是 "Route Model Binding",在我看来您使用的是 Laravel 5.1 或更低版本(路由模型绑定不是隐式的)。 如果您使用 Laravel 5.2 或更高版本,该代码应该可以正常工作。 https://laravel.com/docs/5.3/routing#route-model-binding

但是,如果您在 Laravel 5.1 中,则需要执行额外的步骤:https://laravel.com/docs/5.1/routing#route-model-binding

在providerclassRouteServiceProvider中,在boot方法中,需要绑定哪个路由名{card}应该绑定哪个Model,在本例中Card。 所以,你做这样的事情:

public function boot(Router $router)
{
    parent::boot($router);
    $router->model('card', \App\Card::class);
}

如果你添加它,路由器会知道当它找到 {card} 时它应该得到那个号码并自动使用 ID 执行 Card::findOrFail 如果找到模型它将被传递到你的控制器。