Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从laravel控制器调用私有函数_Php_Laravel_Laravel 4 - Fatal编程技术网

Php 从laravel控制器调用私有函数

Php 从laravel控制器调用私有函数,php,laravel,laravel-4,Php,Laravel,Laravel 4,我试图将一些代码提取到控制器内的私有函数,以便对其进行整理,但该函数似乎无法运行 路线: Route::resource('posts', 'PostsController'); 当我获得以下URL时: /posts?page=2&posts_per_page=3&published=0 它会忽略页面并按页面发布变量(即,它只返回前10个未发布的结果),但当我在index方法中使用此代码时,它就起作用了 public function index() { // se

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

路线:

Route::resource('posts', 'PostsController');
当我获得以下URL时:

/posts?page=2&posts_per_page=3&published=0
它会忽略页面并按页面发布变量(即,它只返回前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');
    }
}

有人能看出我做错了什么吗?

您没有从
$this->getPageandPostSperpage($page,$postsPerPage)返回任何内容

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

您的控制器:

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;
}
如果你需要更多的解释,让我知道!我很乐意进一步帮助你

编辑:

忘了提一下,如果您不想为函数提供返回值,也可以将变量作为函数的引用传递给函数,只需使用符号(
&
)操作符修改函数即可

例如:

function addOne(&$number)
{
    $number++;

    // Notice no return statement
}

$number = 1;

addOne($number);

echo $number; // Returns 2

我所能说的是,您假设私有方法的作用域泄漏回调用作用域。也就是说,您似乎假设在私有方法中设置$page会在index方法中设置它。它不是-您应该返回$page的值(如果您只关心一个变量),或者在私有方法中设置一些类属性,如
$this->page=$page
。您是如何获取url的?发布在routes中获得帖子的路线。phpIt可能值得我说,这不是Laravel特有的。PHP(以及几乎所有其他具有函数和变量作用域的编程语言)中定义的行为是,函数中的变量不会泄漏回调用函数的作用域。感谢帮助@马卡努伊,我已经添加了路线。