라라벨:글로벌 어레이의 데이터와 상수를 저장할 수 있는 장소
기본 몇 년 .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.php
에resources/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')
또는
위의 답변에 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
'programing' 카테고리의 다른 글
PHP interafce mysql()은 동작하지 않지만 mysqli()는 동작합니다.왜일까요? (0) | 2023.01.21 |
---|---|
Python에서 현재 CPU 및 RAM 사용량을 얻는 방법은 무엇입니까? (0) | 2023.01.21 |
mysql의 큰 테이블에서 랜덤 행의 빠른 선택 (0) | 2023.01.21 |
MySQL의 다중 컬럼인덱스 필드 순서가 중요합니까? (0) | 2023.01.21 |
python에서 matplotlib를 사용하여 로그 축 표시 (0) | 2023.01.21 |