>백엔드 개발 >PHP 튜토리얼 >php7 기반으로 구현된 Beauty Framework (코드 포함)

php7 기반으로 구현된 Beauty Framework (코드 포함)

不言
不言원래의
2018-08-01 13:39:191924검색

이 글에서는 php7을 기반으로 한 Beauty Framework 프레임워크(코드 포함)를 소개합니다. 필요한 친구들이 참고하면 좋을 것 같습니다

프레임워크의 핵심 링크입니다. 초기 요청 라우팅 해결부터 컨트롤러 배포, 모델의 데이터 상호 작용, 응답까지.
다른 프레임워크를 사용하여 구현하는 것은 매우 번거롭고, 통합된 내용이 너무 많고 그 중 필요하지 않은 것도 많기 때문에 다른 프레임워크를 기반으로 간단하고 실용적인 프레임워크를 작성했습니다.

라우팅부터 시작해 보겠습니다.
1) 라우팅
라우팅 프로토콜의 규칙은 정규식 일치를 사용하여 다양한 링크를 다양한 컨트롤러에 배포합니다. 또한 익명 함수 호출도 지원합니다

// 第一种,使用匿名函数
App::router()->get('/', function () {
    echo "Beauty Framework.";
});
// 第二种,使用url分发到控制器
App::router()->post('/user/info/[0-9]+(/[0-9]+)?', 'App\Controllers\UserController@getUserInfo');

핵심 코드는 다음과 같습니다. 아주 간단하죠?)

if (is_string($lostrcallable) && preg_match('!^([\a-zA-Z0-9]+)\@([a-zA-Z0-9]+)$!', $lostrcallable, $matches)) {
            $class  = $matches[1];
            $method = $matches[2];

            $callable = function () use ($class, $method) {
                static $obj = null;
                if ($obj === null) {

                    $obj = new $class;
                }

                return call_user_func_array(array($obj, $method), func_get_args());
            };
        }

2) 컨트롤러가 없으면
요청을 가리키는 곳마다 처리할 수 있습니다. 하지만 MVC에 따르면 컨트롤러에 작성하는 것이 좋습니다. 그렇게 생각하면 그냥 하세요.

3) 모델 레이어
Dao 클래스는 데이터베이스 쿼리 작업을 위해 여기에 직접 통합되어 있습니다. 현재 많은 사람들이 MySQL을 사용하고 있고, 데이터베이스 기본 작업이 결합되어 있기 때문입니다. 작업은 많은 주입 및 기타 문제를 야기하며 이를 수행하는 직접적인 Qquery 방법은 없습니다.

4) DAO 레이어
읽기와 쓰기 분리가 필요한 경우가 많지만 MySQL Proxy를 사용하여 구현하기에는 너무 번거롭기 때문에 각기 다른 종류에 따라 마스터 데이터베이스와 슬레이브 데이터베이스를 사용하여 데이터베이스 쿼리를 지원하도록 구현됩니다. sql.sql.
어떻게 하나요?

사용하지 않는 쿼리 작업에 따라 직접 구분됩니다. 선택 쿼리 작업은 읽기 라이브러리에 직접 할당되고, 삽입, 업데이트, 삭제는 쓰기 라이브러리에 직접 할당됩니다. onMasterConnection/onSlaveConnection을 사용하여 직접 지정할 수도 있습니다.

Select가 어떻게 수행되는지 살펴보세요. 이 부분은 구현 로직입니다.

    /**
     * 获取查询内容,以数组形式返回,数据内为array。
     *
     * @access public
     * @param integer|array $limit Array to define SQL limit in format Array ($count, $offset)
     *                             or only $count
     *
     * @return mixed Array of Clients
     */
    protected function get($limit = null)
    {
        $this->dbClient->setQueryChannel($this->channel);

        $results = $this->dbClient->arrayBuilder()->get($this->dbTable, $limit, $this->fields);
        $this->_reset();

        if ($this->dbClient->count == 0) {
            return [];
        }

        return $results;
    }

5) 구성 클래스
개발 환경과 프로덕션 환경에서는 서로 다른 구성 환경이 사용됩니다. . 프레임워크에서 .env 환경을 생성하여 전환할 수 있습니다. 개발과 프로덕션은 config에서 일상적으로 설정할 수 있습니다. 어떤 환경을 사용하든 .env

; This is a environment configuration file
environment=development

에 설정됩니다. 물론 config 파일에서 직접 설정할 수 있는 일부 공개 구성 정보도 있으므로 어떤 환경에서도 사용할 수 있습니다. 환경.

// 支持使用.连接访问配置项,访问的是config/app.php中的config key
\Beauty\Core\App::config()->get("app.config");

6) 요청 응답
View가 필요 없고 json 데이터만 반환하면 되기 때문에 헤더에 text/json을 직접 작성합니다. = =

기타 구현

  • memcache 및 redis는 일관된 해싱을 사용하여 다양한 인스턴스에 액세스합니다.

  • validator 검증 클래스

구체적인 코드는 github https://github.com/tigerk/Beauty

에 있습니다. 추천 관련 글:

Zend Framework Smarty 확장 구현 방법, zendsmarty

Zend 프레임워크 라우팅 메커니즘 코드 분석, zendframework

위 내용은 php7 기반으로 구현된 Beauty Framework (코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.