实例变量中的空数组
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
如果找到模型它将被传递到你的控制器。
我正在学习 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
如果找到模型它将被传递到你的控制器。