【发布时间】:2014-04-19 16:55:11
【问题描述】:
我正在尝试将一些代码提取到控制器内的私有函数中,以便稍微整理一下,但该函数似乎没有运行。
路线:
Route::resource('posts', 'PostsController');
当我得到以下网址时:
/posts?page=2&posts_per_page=3&published=0
它忽略了 page 和 posts_per_page 变量(即它只返回前 10 个未发布的结果)但是当我在 index 方法中使用此代码时,它起作用了。
public function index()
{
// set defaults for page number and posts per page
$page = 1;
$postsPerPage = 10;
$published = 1;
$this->getPagesAndPostsPerPage($page, $postsPerPage);
// Get published or not
// Not published = 0
// Published = 1
if ( Input::has('published') )
{
$published = Input::get('published');
}
// return paginated results
$skip = ($page - 1) * $postsPerPage;
$posts = Post::where('published', '=', $published)
->orderBy('published_date', 'desc')
->skip($skip)
->take($postsPerPage)
->get();
return Response::json([
'data' => $this->transformCollection($posts)
], 200);
}
// Get pages and posts per page
private function getPagesAndPostsPerPage($page, $postsPerPage)
{
// if posts per page and page are defined
if ( Input::has('posts_per_page') && Input::has('page') )
{
// get inputs
$postsPerPage = Input::get('posts_per_page');
$page = Input::get('page');
}
// else if just page is defined
elseif ( Input::has('page') )
{
$page = Input::get('page');
}
}
谁能看出我做错了什么?
【问题讨论】:
-
我只能说你假设私有方法的范围泄漏回调用范围。也就是说,您似乎假设在私有方法中设置 $page 会将其设置在索引方法中。它没有 - 您应该返回 $page 的值(如果您只关心一个变量)或在私有方法中设置一些类属性,如
$this->page = $page。 -
你是怎么得到这个网址的?在 routes.php 中发布获取帖子的路由
-
值得我说的是这不是 Laravel 特有的。在 PHP(以及几乎所有其他具有函数和变量范围的编程语言)中定义的行为是函数内部的变量不会泄漏回其调用函数的范围。
-
感谢各位的帮助。 @marcanuy,我已经添加了路线。