2016-09-22 6 views
0

나는 많은 다른 페이지상의 요소에 대해 350 라인이 넘는 표준 라우 레벨 컨트롤러 기능이 있습니다. 일부 논리는 그 자체의 함수에 넣을 수 있지만 뷰 내에서 사용하려면 변수를 laravel 컨트롤러로 다시 전달해야합니다.Laravel 컨트롤러 내에서 기능 사용

laravel이 이에 대한 표준을 권장합니까? 또는 컨트롤러 내에서 함수를 생성하고 PHP에서와 같이 최종 변수를 다시 전달할 수 있습니까?

전류 컨트롤러의 예제에서, 여기에서 논리를 자체 함수로 분리하고 새로운 함수의 값을 다시 getIndex() 함수로 반환하고 싶습니다.

class PubsController extends Controller 
{ 
    public function getIndex() 
    { 
     //Date Helpers 
     $dateThisMonth = Carbon::now()->startOfMonth()->toDateString(); 
     $dateLastMonth = Carbon::now()->subMonth()->startOfMonth()->toDateString(); 
     $dateNextMonth = Carbon::now()->addMonth()->startOfMonth()->toDateString(); 
    } 
} 
+0

코드 미리보기를 통해 laravel 방식으로 수행 할 수있는 작업을 확인할 수 있습니까? –

+0

연관 배열을 반환하면'return view ('greeting', $ functionResult) -> with ('moreFields', ...);를 통해 뷰를 호출 할 수 있습니다. – apokryfos

답변

1

컨트롤러는 PHP 클래스이므로 다른 클래스와 동일한 기능을 사용할 수 있습니다. 그래서, 그 컨트롤러 내에서 속성이나 기능에 액세스 할 수있는 컨트롤러 내에서

public function index(){ 
    $total = $this->calculateTotal($a, $b); 
    return view("index")->with(["total" => $total]); 
} 

public function calculateTotal($a, $b){ 
    return $a + $b; 
} 

$this : 당신이 당신의 인덱스 뷰에 전달하기 전에 총을 계산 논리의 라인이있는 경우 예를 들어, 당신이 뭔가를 할 수 있습니다 헬퍼 함수를 ​​자유롭게 정의하고 적절하게 액세스 할 수 있습니다.

희망 하시겠습니까?

+0

public function index() { return view "index") -> with ([ "total"=> $ this-> calculateTotal ($ a, $ b)]); } –

+0

@ jakubwrona 그래, 그게 효과가있다; P는 모두 컨텍스트에 의존한다. –

+0

index() 함수를 확장 할 필요가 없으며, 변수가 함수 이름() 옆에 전달되기 때문에이 함수는 뷰에 반환하기 전에'$ total' 전 세계적으로 접근 가능. – SamXronn

0

코드를 재구성하는 데는 여러 가지 방법이 있습니다. 당신은 뭔가를 반환하는 방법을 다음 팀 - 루이스가 표시 @ 같은 모든 결과를 할당 할뿐 아니라 데이터를 계산하여 부분적인 방법에

View::share('someName', $someValue); 

를 사용할 수 있습니다.

1

컨트롤러가 얼마나 큰지에 대한 표준은 없지만 PHP 클래스 크기 권장은 200 줄을 초과하지 않는 것을 기억하십시오.

나는 거의 내가 \ 응용 프로그램 \ 도우미 \ DateHelper.php

<?php 

namespace App\Helpers; 

use Carbon\Carbon; 

class DateHelper { 
    public static getDateThisMonth(){ 
     return Carbon::now()->startOfMonth()->toDateString(); 
    } 
    public static getDateLastMonth(){ 
     return Carbon::now()->subMonth()->startOfMonth()->toDateString(); 
    } 
    public static getDateNextMonth(){ 
     return = Carbon::now()->addMonth()->startOfMonth()->toDateString(); 
    } 
} 

의 클래스를 만들 것입니다 귀하의 예제로 돌아 \ 응용 프로그램 \ 도우미

에서 헬퍼 클래스를 만들 것을 권장하지 않습니다 그리고 당신은 호출 할 수 있습니다 같은 컨트롤러 무언가 : 어떤 경우에는

use App\Helpers\DateHelper; 
class PubsController extends Controller{ 

public function getIndex() 
    { 
     $dateThisMonth = DateHelper::getDateThisMonth(); 
     $dateLastMonth = DateHelper::getDateLastMonth(); 
     $dateNextMonth = DateHelper::getDateNextMonth(); 
    } 
} 

또한 모델 대신 컨트롤러에 몇 가지 논리를 이동하는 것이 좋습니다.

관련 문제