[laravel] Laravel 4 헬퍼 및 기본 기능에 대한 모범 사례?

Laravel 4에서 전역 함수를 배치하는 가장 좋은 장소를 이해하려고합니다. 예를 들어 날짜 형식. 나는 정면이 너무 모듈식이 기 때문에 정면을 만드는 것이 가치가 있다고 생각하지 않습니다. 라이브러리 폴더를 만들고 클래스를 저장하는 방법에 대한 기사를 읽었지만 간단한 기능에는 많은 것 같습니다. 블레이드 템플릿에서 이와 같은 ‘도구’를 사용할 수 없어야합니까?

이와 같은 모범 사례는 무엇이며 블레이드 템플릿에서 어떻게 사용할 수 있습니까?



답변

추악하고 게으르고 끔찍한 방법 :의 끝에 새 기능을 bootstrap/start.php추가하고 include('tools.php')새 파일에 넣으십시오.

깨끗한 방법 : 라이브러리를 만듭니다. 그렇게하면 실제로 사용할 때만 자동으로로드됩니다.

  • 크리에이트 libraries당신의 내부에 폴더를 app폴더
  • 라이브러리 파일을 만들고 클래스를 만들고 정적 함수를 추가하십시오.
  • 옵션 1 : 편집 하여 배열 start/global.php에 추가 app_path().'/libraries'합니다 ClassLoader::addDirectories(.
  • 옵션 2 : 편집 하여 배열 composer.json에 추가 "app/libraries"합니다 autoload. 운영composer dump-autoload
  • 뷰에서 클래스와 정적 함수를 호출하십시오.

global.php파일 에서 인용 한 옵션 정보

Composer를 사용하는 것 외에도 Laravel 클래스 로더를 사용하여 컨트롤러와 모델을로드 할 수 있습니다. Composer를 업데이트하지 않고 모든 클래스를 “글로벌”네임 스페이스에 유지하는 데 유용합니다.

Laravel 클래스 로더가 등록 된 디렉토리에서 클래스를 자동으로 검색하는 옵션 ( 옵션 1 , 더 쉬움)과 Composer는 모든 클래스를 기록하지만 업데이트 한 후에 만 ​​( 옵션 2 ) 성능을 향상시킬 수있는 두 옵션을 결합 할 수 있습니다.


답변

이 작업을 수행하는 방법은 /appLaravel 4 프로젝트 루트의 디렉토리에 새 폴더를 만드는 것 입니다. 그런 다음이 폴더를 /app/start/global.php파일 의 첫 번째 배열에 추가하십시오 .

<?php

ClassLoader::addDirectories(array(

app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/classes', // This line is the one I've added.

));

/app/classes폴더 내의 폴더 구조가 네임 스페이스 규칙을 따르는 한. Laravel 4는이 폴더 내의 모든 클래스 / 파일을 자동로드합니다. 이런 식으로 작곡가 파일을 파거나 작곡가 명령을 실행할 필요가 없습니다.

이것이 모범 사례인지 확실하지 않지만 확실히 작동합니다.

다음 /app/classes/Helpers/Helper.php과 같은 간단한 파일을 만든 경우 :

<?php namespace Helpers;

class Helper {

    public static function helloWorld()
    {
        return 'Hello World';
    }
}

당신이해야 할 일은 전화 Helpers\Helper::helloWorld();

/app/config/app.php파일 에서이 헬퍼 클래스의 별명을 지정할 수도 있습니다 . aliases배열 끝에 다음과 같은 것을 추가하십시오 .

'Helper'          => 'Helpers\Helper'


답변

Laravel의 helpers.php 메소드는 composer.json ( https://github.com/laravel/framework/blob/master/composer.json ) 의 “파일”에 추가하는 것입니다 :

"autoload": {
    "classmap": [
        ...
    ],
    "files": [
        "app/libraries/helpers.php"
    ],
},

내가하는 일은 작은 클래스 (클래스 당 몇 가지 메소드, 메소드 당 한 줄, 무언가에서 확장 된 모든 것 및 DRY를 만드는 것)입니다.

class ExtendedCarbon extends Carbon\Carbon {

    public function formatDDMMAAAA($date)
    {
        /// format and return
    }

}

앱 / 라이브러리에 저장하고 composer.json에 추가하십시오.

"autoload": {
    "classmap": [
        ...
        "app/libraries",
        ...
    ],
},

실행

composer dump

그런 다음 필요할 때마다 사용하십시오

$formatted = (new ExtendedCarbon)->formatDDMMAAAA($date);

리팩토링에 대한이 비디오를보십시오 : http://www.youtube.com/watch?v=DC-pQPq0acs

그건 그렇고, 나는 그것이 단지 예일 것이라고 확신하지만, Laravel의 모든 날짜는 Carbon 인스턴스 ( https://github.com/briannesbitt/Carbon ) 이므로 날짜 형식을 지정하는 데 도우미가 필요하지 않을 수도 있습니다. 날짜 및 시간을 형식화하는 많은 메소드가 있습니다.


답변

View::share()클로저와 함께 사용 하여이를 달성 할 수도 있습니다 . http://www.develophp.org/2014/07/laravel-4-blade-helper-functions/

추가 이점 : 추가 클래스를 만들 필요없이 전역 네임 스페이스를 깨끗하게 유지할 필요가 있습니다.


답변