实例变量

时间:2016-09-05 00:07:32

标签: php laravel laravel-5.1

我正在学习关于laravel和im跟随laracasts的一些视频,但我在控制器显示数据时出现问题,我做得很好,但仍然显示我是空数组,实例卡不工作,这是我的代码:

型号: Card.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Card extends Model
{
    //
}

路线:

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

CardsController:

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'));
    }
}

2 个答案:

答案 0 :(得分:2)

你正在尝试的是"路线模型绑定"在我看来,你正在使用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

在提供程序类RouteServiceProvider中,在boot方法中,您需要绑定哪个路由名{card}应绑定到哪个模型,在本例中为Card。 所以,你做这样的事情:

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

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

答案 1 :(得分:0)

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

在您的路线文件中

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

简而言之,此代码会将卡 ID 传递给您的CardsController类中的show函数。例如。对于这条路线:https://example.com/cards/5,它本质上会调用函数show:show(5)。在您的代码中,您可以将show参数typehinted为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'));
    }
}