programing

라라벨:글로벌 어레이의 데이터와 상수를 저장할 수 있는 장소

luckcodes 2023. 1. 21. 10:17

라라벨:글로벌 어레이의 데이터와 상수를 저장할 수 있는 장소

기본 몇 년 .Larabel 4를 기본 프레임워크로 사용하여 몇 년 전에 만든 시스템 전체를 다시 써야 합니다.'아까'가 요.constant.php 상수가및 " " " 가 선언된 파일"globals.php많은 어레이 세트(카테고리 상태, 이벤트 유형, 언어 등)가 포함된 파일입니다.해서 는 ', 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 이런 걸 쓸 수 있어요.

foreach ( $langs as $code => $domain ) {
    // Some stuff
}

내 앱의 아무 곳이나.

제 질문은 어떻게 하면 소위 말하는 "laravel way"로 그 정보를 저장할 수 있느냐는 것입니다.저는 이 정보를 저장하기 위해 어떤 오브젝트를 사용하여 이것을 서비스로 설정하고 파사드를 만들었습니다.

응용 프로그램/라이브러리/프로젝트/정수.php

namespace PJ;

class Constants {

    public static $langs = [
            'es' => 'www.domain.es',
            'en' => 'www.domain.us',
            'uk' => 'www.domain.uk',
            'br' => 'www.domain.br',
            'it' => 'www.domain.it',
            'de' => 'www.domain.de',
            'fr' => 'www.domain.fr'
        ];
}

응용 프로그램/라이브러리/프로젝트/Constants Service Provider.php

namespace PJ;

use Illuminate\Support\ServiceProvider;

class ConstantsServiceProvider extends ServiceProvider {
    public function register() {
        $this->app->singleton('PJConstants', function() {
            return new Constants;
        });
    }
}

응용 프로그램/라이브러리/프로젝트/Constants Facade.php

namespace PJ;

use Illuminate\Support\Facades\Facade;

class ConstantsFacade extends Facade {
    protected static function getFacadeAccessor() { 
        return 'PJConstants';
    }
}

composer.json

"psr-4": {
     "PJ\\": "app/libraries/Project"
},

는 그 한다.PJ\Constants::$langs.

이것은 효과가 있지만, 가장 효율적이고 올바른 방법이라고는 생각하지 않습니다.즉, 전체 서비스 프로바이더와 외관 등을 생성하여 변수를 "전파"하는 것이 올바른 방법입니까?아니면 이 데이터를 어디에 저장해야 할까요?

조언해 주셔서 감사합니다.

편집 # 01

모든 컨트롤러 및 뷰에 전달할 데이터는 투고 시작 예시와 같이 스크립트로 직접 설정할 수 있지만 데이터베이스 등에서 동적으로 생성할 수도 있습니다.이 데이터는 범주 목록일 수 있습니다.네비게이션 바를 생성하려면 모든 뷰에서 그것들이 필요하지만 라우팅 패턴을 정의하기 위해서도 필요합니다(예:/category/subcategory/product또한 여러 컨트롤러의 정보를 해석합니다(X 제품을 보유하고 있는 카테고리에서 정보를 가져옵니다).

어레이는 다음과 같습니다.

$categories = [
    1 => ['name' => 'General', 'parent' => 0, 'description' => 'Lorem ipsum...'],
    2 => ['name' => 'Nature', 'parent' => 0, 'description' => 'Lorem ipsum...'],
    3 => ['name' => 'World', 'parent' => 0, 'description' => 'Lorem ipsum...'],
    4 => ['name' => 'Animals', 'parent' => 2, 'description' => 'Lorem ipsum...']
]

예를 들면요.색인은 범주의 ID이고 값은 범주와 연관된 정보입니다.

이 어레이는 모든 컨트롤러와 뷰에서 사용할 수 있어야 합니다.

그럼 Config 변수로 저장해야 하나요?이 데이터를 저장하려면 어떻게 해야 할까요?가장 적절하고 의미적으로 올바른 방법은 무엇일까요?

애플리케이션 전체에서 글로벌하게 사용되는 대부분의 상수의 경우 설정 파일에 저장하는 것으로 충분합니다.그것도 꽤 간단하다.

.app/config디렉토리로 이동합니다., 제라고 constants.php

여기서 설정값 배열을 반환해야 합니다.

return [
    'langs' => [
        'es' => 'www.domain.es',
        'en' => 'www.domain.us'
        // etc
    ]
];

그리고 다음과 같이 접근할 수 있습니다.

Config::get('constants.langs');
// or if you want a specific one
Config::get('constants.langs.en');

설정도 가능합니다.

Config::set('foo.bar', 'test');

설정한 값은 유지되지 않습니다.현재 요청에 대해서만 사용할 수 있습니다.

갱신하다

Configuration은 데이터베이스에서 생성된 정보를 저장하는 올바른 위치가 아닐 수 있습니다.다음과 같은 웅변 모델을 사용할 수 있습니다.

class Category extends Eloquent {
    // db table 'categories' will be assumed
}

모든 카테고리를 조회합니다.

Category::all();

모델 전체가 어떤 이유로든 잘 되지 않으면 자신만의 클래스와 외관을 만드는 것을 생각해 볼 수 있습니다.또는 모든 정적 변수와 메서드를 사용하여 클래스를 만든 다음 전면을 사용하지 않고 사용할 수도 있습니다.

상수의 경우

상수를 만듭니다.php 파일을 설정합니다.-

define('YOUR_DEFINED_CONST', 'Your defined constant value!');

return [

'your-returned-const' => 'Your returned constant value!'

];

다음과 같이 사용할 수 있습니다.

echo YOUR_DEFINED_CONST . '<br>';

echo config('constants.your-returned-const');

스태틱 어레이의 경우

static_arrays를 만듭니다.php 파일을 설정합니다.-

class StaticArray
{

    public static $langs = [
        'es' => 'www.domain.es',
        'en' => 'www.domain.us',
        'uk' => 'www.domain.uk',
        'br' => 'www.domain.br',
        'it' => 'www.domain.it',
        'de' => 'www.domain.de',
        'fr' => 'www.domain.fr'
    ];

}

다음과 같이 사용할 수 있습니다.

echo StaticArray::$langs['en'];

주의: Laravel에는 모든 설정 파일이 자동으로 포함되므로 매뉴얼에 포함할 필요가 없습니다.

Larabel에 공통 상수 파일 생성

응용 프로그램/기능을 참조하십시오.php

    define('YOUR_CONSTANT_VAR', 'VALUE');

    //EX
    define('COLOR_TWO', 'red');

composer.json 자동 로드 시 composer.json 파일 위치 추가

"autoload": {
    "files": [
        "app/constants.php"
    ]
}

이 변경을 적용하려면 터미널에서 다음 명령을 실행하여 Larabel의 자동 로드 파일을 재생성해야 합니다.

composer dump-autoload

Larabel 5의 글로벌 상수에 대해서는 Config를 호출하는 것을 좋아하지 않습니다.Route 그룹에서는 다음과 같이 정의합니다.

// global contants for all requests
Route::group(['prefix' => ''], function() {
    define('USER_ROLE_ADMIN','1');
    define('USER_ROLE_ACCOUNT','2');
});

현지화를 이용하는 것이 가장 좋은 방법이라고 생각합니다.

새 파일 만들기messages.phpresources/lang/en(en왜냐하면 그게 내 안에 있는 것이니까.config/app 'locale'=>'en')는 모든 값의 배열을 반환합니다.

return [
    'welcome' => 'Welcome to our application'
];

5.3 이하의 라라벨을 취득하다

echo trans('messages.welcome');

또는

echo Lang::get('messages.welcome');

5.4 용도의

echo __('messages.welcome') 

larabel 5.0 현지화

또는

larabel 5.4 현지화

위의 답변에 config class를 추가하여 Larabel 5.3에서 사용하기 전에 config class를 포함해야 합니다.

use Illuminate\Support\Facades\Config;

적어도 Larabel 5.4에서는 컨스트럭터에서 작성할 수 있습니다.

public function __construct()
{
  \Config::set('privileged', array('user1','user2');
  \Config::set('SomeOtherConstant', 'my constant');     
}     

그러면 메서드에서는 이렇게 부를 수 있습니다.

\Config::get('privileged');

특히 모델의 정적 방법 등에 유용합니다.

Laracasts.com에 있는 레퍼런스

파일 상수를 넣기만 하면 됩니다.php 파일을 config 디렉토리에 저장하고 그 파일에서 상수를 정의합니다.이 파일은 자동으로 로드됩니다.Laravel 6+에서 테스트됩니다.

상수 클래스 만들기:

<?php
    
    namespace App\Support;
    
    class Constants {
        /* UNITS */
        public const UNIT_METRIC = 0;
        public const UNIT_IMPERIAL = 1;
        public const UNIT_DEFAULT = UNIT_METRIC;
    
    }

그런 다음 모델, 컨트롤러 등에 사용합니다.

<?php

namespace App\Models;

use App\Support\Constants;

class Model
{
  public function units()
  {
      return Constants::UNIT_DEFAULT;
  }
}

언급URL : https://stackoverflow.com/questions/26854030/laravel-where-to-store-global-arrays-data-and-constants