설치 프로그램 스크립트에 불필요하고 잠재적으로 위험한 표준 코드 사용

magento.stackexchange https://magento.stackexchange.com//questions/68387

문제

나는 항상 사용자가 위험도가 높은 방식으로 행동하는 것이 일종의 전염병이라고 생각했습니다. $installer->startSetup() 그리고 $installer->stopSetup() 설치 프로그램 스크립트를 호출합니다.

제공된 많은 예제 코드(여기 및 다른 사이트에서 다운로드할 수 있는 다양한 확장 프로그램에서도 찾을 수 있음)에는 다음으로 시작하는 설치 프로그램 스크립트가 포함되어 있습니다.

<?php

$installer = $this;

$installer->startSetup();

# some or many lines of code that do not 
# need $installer->startSetup(); at all for sure
#
# ...
#

$installer->endSetup();

나는 항상 이것이 나쁜 습관이며 불필요하게 느슨해질 위험이 있으므로 예제 코드에서 사용해서는 안 된다는 인상을 받았습니다. $installer->endSetup(); 설치 후 일관성 없는 데이터베이스 구성이 발생하여 전체 설치가 위험해질 수 있습니다.

그래서 내 질문은 '그렇습니까?이것이 100% 필요하다고 확신하지 않는 한 이러한 방법을 사용하지 말라고 조언하는 매우 명확한 사례입니까?

저자는 그것이 무엇을 위한 것인지 모르기 때문에 항상 넣어 두는 것 같은 느낌이 들지만 그녀는 그것이 거기에 있어야 한다고 생각하고, 그것을 사용하는 것이 멋지고, 해칠 수 없으며 어쨌든 작동하기 때문에 이 위험한 작업을 계속합니다. 관행.

또한 오늘 오전에 편집을 제안했을 때 리뷰 피드백에서 많은 사용자가 이 점에 대해 확신이 없는 것 같아서 메타에 대해 물어볼까도 생각했습니다.이에 대한 설명과 참고 자료를 보고 싶습니다.

도움이 되었습니까?

해결책

당신 말이 100% 맞습니다.사용 $installer->startSetup(); 매우 위험합니다.
특히 속성을 제거하는 스크립트에서 사용할 때 그렇습니다.내 속성이 삭제되었지만 속성 값이 db에 좀비 레코드로 남겨졌을 때 어려운 방법을 배웠습니다.
나는 "핵심에서 그렇게 하기" 때문에 이것이 수행된다는 귀하의 가정을 공유합니다.
포함하는 것도 마찬가지다.

<all>
    <title>Allow everything</title>
</all> 

ACL 섹션에서 레이아웃 파일에 버전 추가 <layout version="0.1.0">.

하지만 startSetup은 실제로 약간의 피해를 입힐 수 있습니다.내가 언급한 다른 두 가지 "전통"은 무해합니다.

여기까지 온 다른 사람들에게 분명히 하기 위해서입니다.
startSetup 다음 쿼리를 실행합니다

SET SQL_MODE='';
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'

이는 FK 검사가 비활성화되어 있으며 값을 삽입할 수 있음을 의미합니다. 0 PK인 열의 경우.(이 작업이 수행되는 방식과 유사합니다. core_store )의 표.

endSetup 단지 효과가 역전될 뿐입니다. startSetup.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top