PHP 의 Yii 2 프레임 워 크 의 개발 장점 을 열거 합 니 다.

13157 단어 PHP프레임
Yii 프레임 워 크 가 RC(후보 판)단계 에 있 을 때 우 리 는 그것 에 대해 보 도 를 한 적 이 있다.그 때 는 후보 버 전 단계 에 이 르 렀 고(현재 정식 버 전 을 발표 했다)우 리 는 이 화 제 를 다시 토론 할 때 가 된 것 같다.Yii 프레임 워 크 를 선택 한 이유 다.
1.설치 하기 쉽다
웹 개발 자 에 게 시간 은 돈 이 고 귀중 한 시간 을 복잡 한 설치 와 배치 과정 에 쓰 려 는 사람 은 없다.
설치 처리 사용Composer.만약 당신 이 설치 과정 을 묘사 하고 싶다 면,Sitepoint 는 최근 에 아주 좋 은 글 을 발 표 했 습 니 다.여기비록 내 사이트 에 단독 전단 과 백 엔 드 구성 요소 가 있 더 라 도 기본 적 인 응용 프로그램 템 플 릿 을 사용 하 는 경향 이 있다.반대로 나 는 모듈 을 사용 하여 내 사이트 의 백 스테이지 부분 을 선택 했다.Yii 모듈 은 가장 좋 은 설명 입 니 다.작은 응용 프로그램 이 주 응용 프로그램 에 남아 있 습 니 다).
메모:많은 디 렉 터 리 의 인용 은 뒤의 예제 에서 간단 한 템 플 릿 에서 디 렉 터 리 의 구 조 를 사용 합 니 다.
2.현대 기술 활용
Yii 는 순수한 대상 을 대상 으로 하 는 프레임 워 크 이 며,PHP 의 일부 고급 기능 을 이용 하여 정적 연결 지연,SPL 류 와 인터페이스,익명 함 수 를 포함한다.
모든 클래스 이름 공간 은 PSR-4 호 환 자동 로 더 를 사용 할 수 있 습 니 다.이것 은 Yii 의 HTML 도움말 류 와 같은 간단 함 을 의미 합 니 다.
 

use yii\helpers\Html;
Yii 도 네 임 스페이스 를 간소화 하 는 데 도움 을 줄 별명 을 정의 할 수 있 습 니 다.위의 예제 에서  use 문 구 는 클래스 정 의 를 불 러 옵 니 다.기본 디 렉 터 리/vendor/yiisoft/yii 2/helpers.  이 별명 은BaseYii클래스 가 79 줄 에서 정의 합 니 다. 
 

public static $aliases = ['@yii' => __DIR__];
프레임 자체 의 설 치 는 Composer 를 사용 합 니 다.확장 입 니 다.심지어 출판 과정 이 확장 되 는 것 처럼 자신의 coposer.json 을 만 들 기 쉬 우 며,Github 위탁 관리 코드 에서 확장 자 를 Packagist 에 표시 합 니 다.
3.고도 확장 성
Yii 는 스타일 이 좋 은 양복 처럼 보이 지만 당신 의 요구 에 따라 맞 춤 형 제작 이 용이 합 니 다.실제 프레임 의 모든 구성 요 소 는 확장 이 가능 합 니 다.하나의 간단 한 예 는 보기 에 유일한 주체 ID 를 추가 하 는 것 입 니 다.(당신 이 왜 이렇게 하려 고 하 는 지 에 관심 이 있다 면 이 글 을 보 세 요).
우선,제 app\components 디 렉 터 리 에 View.php 라 는 파일 을 만 들 고 다음 코드 를 추가 하 겠 습 니 다.
 

namespace app\components;
 
class View extends yii\web\View {
 
  public $bodyId;
 
  /* Yii allows you to add magic getter methods by prefacing method names with "get" */
 
  public function getBodyIdAttribute() {
    return ($this->bodyId != '') ? 'id="' . $this->bodyId . '"' : '';
  }
 
}
그 다음 에 제 홈 레이아웃 파일(app\views\layouts\main.php)에서 다음 코드 를 제 HTML 에 body 태그 에 추가 하 겠 습 니 다.
 

<body <?=$this->BodyIdAttribute?>>
마지막 으로,Yii 가 기본 클래스 가 아 닌 확장 보기 클래스 를 사용 하 는 방법 을 알 수 있 도록 다음 코드 를 추가 합 니 다.
 

return [
  // ...
  'components' => [
    // ...
    'view' => [
      'class' => 'app\components\View'
    ]  
  ]
];
4.테스트 장려
Yii 프레임 워 크 와 Codeception 프레임 워 크 가 긴밀 하 게 통합 되 어 있 습 니 다.Codeception 은 단원 테스트,기능 검수 테스트 를 만 드 는 절 차 를 간소화 하 는 데 도움 을 주 는 우수한 PHP 테스트 프레임 워 크 입 니 다.조건 은 모든 응용 프로그램 을 위해 자동 화 된 테스트 용례 를 작성 하 는 것 입 니 다.그 렇 죠?
Codeception 확장 은 테스트 할 때 프로그램 설정 을 간단하게 합 니 다.테스트 프로그램,존재 하 는 파일/tests/ 만 편집 하면 됩 니 다.config.php。예 를 들 면:
 

return [
  'components' => [
    'mail' => [
      'useFileTransport' => true,
    ],
    'urlManager' => [
      'showScriptName' => true,
    ],
    'db' => [
        'dsn' => 'mysql:host=localhost;dbname=mysqldb_test',
    ],
  ],
];
위의 설정 을 사용 하려 면 다음 사항 을 주의해 야 합 니 다.
  •     기능 검수 테스트 기간 에 보 낸 모든 메 일 은 실제 보 내 는 것 이 아니 라 파일 에 기록 되 어 저 장 됩 니 다.
  •     테스트 할 때 URL 의 형식 은 index.php/controller/action 이지/controller/action 이 아 닙 니 다.
  •     테스트 할 때 생산 데이터베이스 가 아 닌 테스트 데이터 베 이 스 를 사용 해 야 합 니 다.
  • Codeception 내부 에 Yii 프레임 워 크 테스트 에 사용 되 는 특수 한 모듈 이 존재 합 니 다.이 는 TestGuy 류 에 기능 테스트 시 Active Record(Yii 의 ORM)가 정상적으로 작 동 할 수 있 도록 방법 을 추가 했다.예 를 들 어 등록 폼 이 testuser 라 는 사용자 대상 을 성공 적 으로 만 들 었 는 지 확인 하려 면 이렇게 할 수 있 습 니 다.
     
    
    $I->amOnPage('register');
    $I->fillField('username', 'testuser');
    $I->fillField('password', 'qwerty');
    $I->click('Register');
    $I->seeRecord('app\models\User', array('name' => 'testuser'));
    
    5.간소 화 된 안전 방안
    안전성 은 모든 웹 애플 리 케 이 션 의 중요 한 구성 부분 입 니 다.다행히도 Yii 는 부담 을 줄 일 수 있 는 좋 은 특성 이 많 습 니 다.
    Yii 는보안 응용 프로그램 구성 요소를 가 져 왔 습 니 다.더 안전 한 프로그램 을 만 드 는 데 도움 이 되 는 방법 을 드 러 냈 습 니 다.그 중에서 상대 적 으로 더 유용 한 방법 은 다음 과 같 습 니 다.
        generatePasswordHash:암호 와 무 작위 소금 값 으로 안전 한 해시 값 을 만 듭 니 다.이 방법 은 무 작위 소금 값 을 만 들 고 PHP 의 crypt 함 수 를 사용 하여 제공 하 는 문자열 에 따라 해시 값 을 만 듭 니 다.
        validatePassword:generatePassword Hash 와 함께 사용 할 수 있 는 방법 입 니 다.사용자 가 제공 한 비밀번호 가 저 장 된 해시 값 과 일치 하 는 지 확인 할 수 있 습 니 다.
        generateRandomKey:모든 길이 의 무 작위 문자열 을 만 들 수 있 습 니 다.
    Yii 는 모든 보안 이 아 닌 HTTP 요청 방법(PUT,POST,DELETE)의 사용 가능 한 CSRF 토 큰 을 자동 으로 검사 하고,ActiveForm::begin()방법 으로 개발 폼 탭 을 만 들 때 토 큰 값 을 생 성하 고 출력 합 니 다.이 기능 은 홈 프로필 을 편집 하여 다음 코드 를 포함 하여 비활성화 할 수 있 습 니 다.
     
    
      return [
        'components' => [
          'request' => [
            'enableCsrfValidation' => false,
          ]
      ];
    
    제방 스 크 립 트 XSS 공격 을 위해 Yii 는 Html Purifier 라 는 또 다른 보조 클래스 를 제공 합 니 다.이 클래스 는 process 라 는 정적 방법 이 있 으 며,같은 이름 의 유행 필터 라 이브 러 리 를 사용 하여 출력 을 걸 러 냅 니 다.
    Yii 는 사용자 인증 과 권한 수여 에 사용 할 수 있 는 클래스 도 포함 되 어 있 습 니 다.권한 수 여 는 두 가지 유형 으로 나 뉘 어 있 습 니 다.ACF(액세스 제어 필터)와 RBAC(캐릭터 접근 기반 제어)입 니 다.
    둘 중 더 나 은 것 은 ACF 입 니 다.컨트롤 러 에 다음 과 같은 행동 방법 을 추가 하 는 것 입 니 다.
     
    
    use yii\filters\AccessControl;
     
    class DefaultController extends Controller {
      // ...
      public function behaviors() {
        return [
          // ...
          'class' => AccessControl::className(),
          'only' => ['create', 'login', 'view'],
            'rules' => [
            [
              'allow' => true,
              'actions' => ['login', 'view'],
              'roles' => ['?']
            ],
            [
              'allow' => true,
              'actions' => ['create'],
              'roles' => ['@']
            ]
          ]
        ];
      }
      // ...
    }
    
    위의 코드 는 default Controller to 에 게 방문객 사용자 가 create 가 아 닌 login 과 view 의 action 에 접근 하도록 알려 줍 니 다.(물음표?익명 사용자 의 별명 입 니 다.@은 권한 을 수 여 받 은 사용 자 를 표시 합 니 다).
    RBAC 는 사용자 가 특정한 동작 을 수행 할 수 있 도록 프로그램 에서 지정 할 수 있 는 강력 한 방법 입 니 다.이 방법 은 사용자 에 게 캐릭터 를 만 들 고,app 에 권한 을 정의 한 다음,사용자 가 원 하 는 캐릭터 에 사용 할 수 있 는 강력 한 방법 입 니 다.심사 위원(Moderator)역할 을 만 들 려 면 이 방법 을 사용 하 십시오.또한 이 역할 에 배 치 된 모든 사용자 가 글 을 심사 할 수 있 도록 할 수 있다.
    RBAC 정의 규칙 도 사용 할 수 있 습 니 다.특정한 조건 에서 프로그램의 어떤 부분 에 대해 권한 을 부여 할 수 있 습 니 다.예 를 들 어 다른 사람 이 만 든 글 을 수정 하지 않 고 사용자 가 자신의 글 을 편집 할 수 있 도록 규칙 을 만 들 수 있 습 니 다.
    6.개발 기간 단축
    대부분의 프로젝트 는 반복 되 는 임 무 를 포함 하고 있 으 며,아무 도 반복 되 는 일 에 시간 을 낭비 하고 싶 어 하지 않 는 다.Yii 는 이러한 임무 에 더 적은 시간 을 들 이 고 대부분의 시간 을 맞 춤 형 응용 프로그램 으로 고객 의 수 요 를 만족 시 키 는 데 사용 할 수 있 도록 도 구 를 제공 했다.
    그 중 가장 강력 한 도 구 는'지 이'다.Gii 는 웹 비계 코드 도구 입 니 다.코드 템 플 릿 을 빠르게 만 들 수 있 습 니 다.다음 과 같 습 니 다.
  •     Models
  •     Controllers
  •     Forms
  •     Modules
  •     Extensions
  •     CRUD controller actions and views
  • 지 이 는 높이 설정 이 가능 합 니 다.특정한 환경 에서 만 불 러 올 수 있 도록 설정 할 수 있 습 니 다.간단 한 웹 프로필 편집 은 다음 과 같 습 니 다.
    
     
    if (YII_ENV_DEV) {
      // ...
      $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        'allowedIPs' => ['127.0.0.1', '::1']
      ]
    }
    
    이 는 Gii 가 Yii 의 환경 변 수 를(development)개발 환경 으로 설정 할 때 만 불 러 오고 로 컬 환경 을 통 해 접근 할 때 만 불 러 오 는 것 을 확보 합 니 다.
    이제 모델 의 생 성 을 살 펴 보 자.
    201573142815193.jpg (1366×914)
    표 이름 은 응답 을 두 드 리 면 표시 되 는 작은 창 을 사용 하여 모델 이 연 결 될 표 에 대한 추측 을 시도 합 니 다.또한 모든 도 메 인 값 입력 상자 에 반전 효과 가 나타 나 는 알림 이 있 습 니 다.작성 을 완료 하 는 방법 을 알려 줍 니 다.Gii 출력 코드 를 사용 하기 전에 미리 보 기 를 할 수 있 습 니 다.모든 코드 템 플 릿 은 완전히 맞 춤 형 입 니 다.
    데이터베이스 이전,메시지 번역(I18N)및 자동화 테스트 데이터베이스 도 구 를 만 드 는 명령 행 보조 도구 도 몇 개 있 습 니 다.예 를 들 어 다음 코드 를 사용 하여 새로운 데이터베이스 이전 파일 을 만 들 수 있 습 니 다.
    
    yii migrate/create create_user_table
    
    이것 은{응용 디 렉 터 리}/migrations 에서 아래 와 같은 이전 템 플 릿 을 만 들 것 입 니 다.
     
    
    <?php
     
      use yii\db\Schema;
     
      class m140924_153425_create_user_table extends \yii\db\Migration
      {
        public function up()
        {
     
        }
     
        public function down()
        {
          echo "m140924_153425_create_user_table cannot be reverted.
    "; return false; } }
    그렇다면 이 시계 에 열 을 추가 하고 싶다 면 아래 코드 를 up 방법 에 간단하게 추가 하면 됩 니 다.
     
    
    public function up()
    {
      $this->createTable('user', [
        'id' => Schema::TYPE_PK,
        'username' => Schema::TYPE_STRING . ' NOT NULL',
        'password_hash' => Schema:: TYPE_STRING . ' NOT NULL'
      ], null);
    }
    
    그리고 내 가 이전 할 수 있 는 역방향 조작 을 확보 하기 위해 다운 방법 을 편집 할 것 이다.
     
    
    public function down()
    {
      $this->dropTable('user');
    }
    
    표를 만 드 는 것 은 명령 줄 에서 명령 을 실행 할 때 까지 간단 한 디자인 일 수 있 습 니 다.
     
    
    ./yii migrate
    
    표 삭 제 는 다음 명령 입 니 다:
     
    
    ./yii migrate/down
    
    7.조정 을 통 해 더 좋 은 성능 을 얻 기 쉽다
    모든 사람들 이 느릿느릿 한 사이트 가 불만 을 품 은 많은 사용 자 를 만 들 수 있다 는 것 을 알 고 있 기 때문에 Yii 는 응용 프로그램 이 더 빠 른 속 도 를 얻 을 수 있 도록 도 구 를 제공 했다.
    모든 Yii 캐 시 구성 요 소 는yii/caching/Cache에서 확 장 됩 니 다.공공 API 를 사용 하 는 동시에 임의의 캐 시 시스템 을 선택 할 수 있 습 니 다.여러 개의 캐 시 구성 요 소 를 동시에 등록 할 수 있 습 니 다.Yii 는 현재 데이터베이스 와 파일 시스템 캐 시 를 지원 합 니 다.또한 APC,Memcache,Redis,WinCache,XCache,Zend Data Cache 도 지원 합 니 다.
    기본 적 인 상황 에서 Active Record 를 사용한다 면 Yii 는 모델 을 만 드 는 표 의 구 조 를 확인 하기 위해 조 회 를 추가 로 실행 합 니 다.아래 와 같이 메 인 프로필 을 편집 하여 프로그램 을 설정 하여 표 구 조 를 캐 시 할 수 있 습 니 다.
     
    
    return [
      // ...
      'components' => [
        // ...
        'db' => [
          // ...
          'enableSchemaCache' => true,
          'schemaCacheDuration' => 3600,
          'schemaCache' => 'cache',
        ],
        'cache' => [
          'class' => 'yii\caching\FileCache',
        ],
      ],
    ];
    
    마지막 으로 Yii 는 전단 필드 를 축소 할 수 있 는 명령 행 도구 가 있 습 니 다.아래 명령 을 간단하게 실행 하면 설정 템 플 릿 을 만 들 수 있 습 니 다.
     
    
    ./yii asset/template config.php
    
    그리고 이 설정 을 편집 합 니 다.축소 작업 을 수행 할 도구(예:Closure Compiler,YUI Compressor,UglifyJS)를 지정 합 니 다.생 성 된 설정 템 플 릿 은 다음 과 같 습 니 다.
     
    
    <?php
      return [
        'jsCompressor' => 'java -jar compiler.jar --js {from} --js_output_file {to}',
        'cssCompressor' => 'java -jar yuicompressor.jar --type css {from} -o {to}',
        'bundles' => [
          // 'yii\web\YiiAsset',
          // 'yii\web\JqueryAsset',
        ],
        'targets' => [
          'app\config\AllAsset' => [
            'basePath' => 'path/to/web',
            'baseUrl' => '',
            'js' => 'js/all-{hash}.js',
            'css' => 'css/all-{hash}.css',
          ],
        ],
        'assetManager' => [
          'basePath' => __DIR__,
          'baseUrl' => '',
        ],
      ];
    
    다음은 압축 을 수행 하기 위해 이 콘 솔 명령 을 실행 합 니 다.
     
    
    yii asset config.php /app/assets_compressed.php
    
    마지막 으로 웹 프로그램 프로필 을 수정 하고 압축 된 자원 을 사용 합 니 다.
     
    
    'components' => [
      // ...
      'assetManager' => [
        'bundles' => require '/app/assets_compressed.php'
      ]
    ]
    
    메모:이 추가 도 구 를 수 동 으로 다운로드 하고 설치 해 야 합 니 다.

    좋은 웹페이지 즐겨찾기