Aufruf von privaten Funktion von laravel-controller
Ich versuche zu extrahieren einige code eine private Funktion in einem controller, damit tidy es ein wenig, aber die Funktion scheint nicht zu laufen.
Route:
Route::resource('posts', 'PostsController');
Wenn ich die folgende URL:
/posts?page=2&posts_per_page=3&published=0
Er ignoriert die Seite und posts_per_page Variablen (d.h. es gibt nur die ersten 10 unveröffentlichte Ergebnisse), Aber wenn ich hatte diesen code innerhalb der index
Methode hat es geklappt.
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');
}
}
Kann jemand sehen, was ich falsch mache?
- Alles was ich sagen kann ist, dass Sie unter der Annahme, dass die private Methode Anwendungsbereich Lecks zurück in den aufrufenden Bereich. Das heißt, Sie scheinen anzunehmen, dass die Einstellung $Seite in der private-Methode legt es in die index-Methode. Es bedeutet nicht, sollten Sie entweder wieder den Wert von $Seite (wenn Sie nur über eine variable) oder einige Eigenschaften der Klasse wie
$this->page = $page
in der privaten Methode. - Wie bekommen Sie die url? Post von der Strecke, bekommt Beiträge in routes.php
- Lohnt es sich wahrscheinlich, mir zu sagen, dass dies nicht Laravel-spezifisch. Es definiert Verhalten in PHP (und so ziemlich jeder anderen Programmiersprache mit Funktionen und Variablen-scopes), dass die Variablen innerhalb einer Funktion nicht Auslaufen zurück an die aufrufende Funktion Umfang zu.
- Vielen Dank für die Hilfe Jungs. @marcanuy, ich habe die route.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bist du nicht wieder alles von
$this->getPagesAndPostsPerPage($page, $postsPerPage);
Definierten Variablen innerhalb einer Funktion sind Funktion bestimmten, was bedeutet, dass Sie brauchen, um pass-Funktion Variablen hin und her, wenn Sie brauchen, um zu greifen sich aktualisierte Wert. Entweder das, oder verwenden Sie Klassen-Variablen (Eigenschaften), damit Sie Zugang zu den aktualisierten Wert von überall in Ihrem code.
Ihren controller:
Ihre
getPagesandPostsPerPage()
Funktion:Wenn du mehr brauchst Erklärung lassen Sie mich wissen! Ich würde Sie gerne und helfen Ihnen weiter.
EDIT:
Vergaß zu erwähnen, können Sie auch übergeben Sie die variable als Referenz auf die Funktion, wenn Sie nicht wollen, um eine return-Wert von Funktionen mit dem und-Zeichen (
&
) - operator, um nur Sie zu ändern.http://php.net/manual/en/language.references.pass.php
Beispiel: