从laravel控制器调用私有函数

问题描述 投票:1回答:1

我正在尝试将一些代码提取到控制器内部的私有函数中,以便对其进行整理,但是该函数似乎无法运行。

路线:

Route::resource('posts', 'PostsController');

当我获得以下URL时:

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

谁能看到我在做什么错吗?

php laravel laravel-4
1个回答
8
投票
在函数内部定义的变量是函数

特定

,这意味着如果需要获取它们的更新值,则需要来回传递函数变量。或者,或者使用类变量(属性),以便您可以从代码中的任何位置访问更新的值。

您的控制器:

public function index() { // set defaults for page number and posts per page $page = 1; $postsPerPage = 10; $published = 1; // Get the return value: $pagesAndPostsPerPage = $this->getPagesAndPostsPerPage($page, $postsPerPage);

您的getPagesandPostsPerPage()功能:

private function getPagesAndPostsPerPage($page, $postsPerPage){
    //Grab pages and posts per page here

    //Create a new array and set the values
    $pagesAndPostsPerPage = array(
        'page' =>$page,
        'postsPerPage'=>$postsPerPage,
    );
    //Return the array
    return $pagesAndPostsPerPage;
}

如果您需要更多说明,请告诉我!我很高兴为您提供进一步的帮助。

编辑:

忘记,如果您不想使用和号(&)运算符来修改函数,也可以将变量作为函数的引用传递给它。

http://php.net/manual/en/language.references.pass.php

示例:

function addOne(&$number) { $number++; // Notice no return statement } $number = 1; addOne($number); echo $number; // Returns 2

© www.soinside.com 2019 - 2024. All rights reserved.