有什么区别:
class PostController extends \BaseController {
public function delete($id) {
$deletePost = Post::findOrFail($id);
return View::make('backend.delete')->with('post', $deletePost);
}
}
和
class PostController extends \BaseController {
public function delete(Post $post) {
return View::make('backend.delete')->with('post', $post);
}
}
有人可以向我解释:public function delete(Post $post)
我们将名为“Post”的类作为变量$post
?
UPDATE1。
在routes.php中:
Route::model('post', 'Post');
Route::get('delete/{post}', array('uses' => 'PostController@delete'));
Route::post('delete', array('uses' => 'PostController@doDelete'));
并在PostController.php中:
public function delete(Post $post) {
return View::make('backend.delete')->with('post', $post);
}
public function doDelete() {
$post = Post::findOrFail(Input::get('id'));
$post->delete();
return Redirect::action('PostController@home');
}
但无论如何我得到一个错误:模型[Post]没有查询结果。 用第二种方法。
答案 0 :(得分:2)
它们都能为你提供模型(如果它存在)。
第二种方式称为Route Model binding。路径模型绑定提供了一种将模型实例注入路径的便捷方法。
将模型绑定到路线:
Route::model('post', 'Post');
接下来,定义包含{user}参数的路由:
Route::get('delete/{post}', array('uses' => PostController@delete));
因此我们将{post}
参数绑定到Post模型,Post实例将被注入到路径中。
这意味着如果有人到达你的delete()函数 - 他们已经提供了一个有效的Post模型 - 相当于Post::findOrFail($id)
答案 1 :(得分:2)
这只是一种暗示:
“类型提示意味着你传递的任何内容都必须是( 和你提示的类型一样。“
在你的例子中它是Post:
public function delete(Post $post) { /* code */ }
它只是检查$post
变量是否实例。所以你的代码中的一切都很好看。它应该工作。