StorageInterface::url 의 public 하드코딩을 완화하고 core.storage.filter_url 훅을 신설해, 완전 공개 자산(상품·카테고리·리뷰·에디터 이미지)의 직접 URL 서빙을 옵트인으로 열었다. 미설정 시 기존 스트리밍 100% 보존. 디스크 결정은 확장 개별 설정 > 코어 전역 > 미설정 순이며, 서빙·삭제·이동은 행에 기록된 disk 를 따라 전환 전후 자산이 혼재해도 각자 실제 저장 위치를 향한다. 고아 disk(공급 플러그인 비활성화)는 스트리밍으로 폴백해 500 이 되지 않는다. 공개 이슈 (@lyg-kaban 건의) 대응.
46 lines
1.5 KiB
PHP
46 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Contracts\Extension;
|
|
|
|
/**
|
|
* 캐시/스토리지 도메인 분리를 제공하는 확장의 좁은 contract.
|
|
*
|
|
* AbstractModule / AbstractPlugin 이 공통으로 노출하는 캐시·스토리지
|
|
* 접근자를 한 인터페이스로 묶어, AbstractExtensionServiceProvider 가
|
|
* 모듈·플러그인 양쪽을 균등하게 다룰 수 있도록 합니다.
|
|
*/
|
|
interface CacheableExtensionInterface
|
|
{
|
|
/**
|
|
* 확장 식별자를 반환합니다 (vendor-extension 형식).
|
|
*
|
|
* @return string 확장 식별자
|
|
*/
|
|
public function getIdentifier(): string;
|
|
|
|
/**
|
|
* 확장 도메인에 격리된 스토리지 드라이버를 반환합니다.
|
|
*
|
|
* @return StorageInterface 확장 전용 스토리지 인스턴스
|
|
*/
|
|
public function getStorage(): StorageInterface;
|
|
|
|
/**
|
|
* 카테고리별 스토리지 드라이버를 반환합니다.
|
|
*
|
|
* getStorageDiskFor($category) 가 결정한 디스크의 인스턴스를 반환하며,
|
|
* 기본 구현은 getStorage() 와 동일한 디스크를 사용합니다.
|
|
*
|
|
* @param string $category 카테고리 (settings, attachments, images, cache, temp)
|
|
* @return StorageInterface 카테고리 디스크의 스토리지 인스턴스
|
|
*/
|
|
public function getStorageFor(string $category): StorageInterface;
|
|
|
|
/**
|
|
* 확장 도메인에 격리된 캐시 드라이버를 반환합니다.
|
|
*
|
|
* @return CacheInterface 확장 전용 캐시 인스턴스
|
|
*/
|
|
public function getCache(): CacheInterface;
|
|
}
|