개발에 ThinkPhp3.2를 사용하는 이유는 코드 재사용을 늘리기 위해 추가, 삭제, 수정 및 검색 작업을 여러 번 사용해야 하기 때문입니다. 코드의 추가, 삭제, 수정 및 조회를 수행하기 위해 curdControler와 curdModel을 공통으로 작성했습니다. 추가, 삭제, 수정 및 조회를 사용해야 할 경우 curdController와 curdModel을 직접 상속합니다.
이제 문제가 있습니다. 일반적으로 커드 작업에는 허가 판단이 필요합니다. 그렇지 않으면 매우 위험합니다. 여기서 내 생각은 다양한 기능과 권한 제어 메서드 때문에 curdController 생성 메서드에서 checkAuth()를 호출하는 것입니다. 어떻게 curdController를 상속하는 하위 클래스가 checkAuth 메서드를 오버로드하도록 할 수 있나요?
권한 판단 기능을 추상적인 방법으로 정의하는 것이 제 생각입니다
으아악curdController 클래스는 추상 클래스로 정의되어 있지만 추상 클래스를 인스턴스화할 수 없으면 생성자의 코드가 유효하지 않게 됩니다. 이 구현에 어떤 문제가 있나요?
두 번째 질문, TP 코드를 재사용할 때 더 좋은 아이디어가 있나요? 제 접근 방식의 숨겨진 위험과 문제점은 무엇인가요? 조언해 주셔서 감사합니다. 으아악
코드 재사용을 위해 PHP 기능을 사용하는 것이 좋습니다:
http://php.net/manual/zh/lang...
또는 클로저 바인딩 사용(권장하지 않음):
http://php.net /manual/en /클로스...
checkAuth
可以通过不同的业务,书写不同的traits,在具体继承curdController的类中使用对应的traits,由于checkAuth()
只返回校验结果的真假,所以这个可以向任意的Controller中定制checkAuth()
.첫 번째 질문에 대한 답변으로, 추상 클래스를 상속하고 있으므로
으아악curdController
的子类构造函数里,手动调用了parent::__construct();
하위 클래스가 인스턴스화되는 한 상위 클래스의 생성자도 사용할 수 있습니다. 아래 예를 참조하세요.코드:
결과:
두 번째 질문에 대한 응답으로 저는 개인적으로 전체 구조적 프레임워크가 다소 거칠다고 생각합니다. 일반적인 일대다 및 다대다 관계는 여전히 수동으로 수행해야 하며 이 연결 작업을 캡슐화하는 것이 좋습니다.
제가 개인적으로 더 많이 사용하는 프레임워크는
CodeIgniter
,但是我觉得MVC(HMVC)模型基本思路都是一致的,所以下面谈下我个人在CodeIgniter
에서 만든 재사용 패키지이지만:저는 개인적으로 데이터 테이블의 원자적 연산을 맨 아래 레이어에 배치했습니다.
으아악Model
上面(是基于CI-Base-Model
改的,你可以看一下CI-Base-Model
里的has_many
和belongs_to
配置),另外我继承了CI-Base-Model
自己写了一个CRUD_Model
,这个CRUD_Model
거의 일부 구성 항목과 일부 재작성을 사용하여 표준 CRUD 배열을 빠르게 생성할 수 있습니다.내 모델의 아이디어가 CRUD 로직을 개선하는 데 도움이 되기를 바랍니다.