型号: 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'));
}
}
答案 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'));
}
}