PHP Yii 2 Framework_php 기술의 개발 이점 나열

WBOY
풀어 주다: 2016-05-16 20:11:51
원래의
1109명이 탐색했습니다.

우리는 아직 RC(Release Candidate) 단계에 있던 Yii 프레임워크에 대해 보고했고, 이제 막 Release Candidate 단계에 완전히 도달한 상태였습니다. (이제 공식적으로 출시되었으므로) 이 주제에 대해 논의할 때가 왔다고 생각합니다. 다시 : Yii 프레임워크를 선택한 이유.

1. 간편한 설치

웹 개발자에게는 시간이 곧 돈이며 누구도 복잡한 설치 및 구성 프로세스에 귀중한 시간을 낭비하고 싶어하지 않습니다.

설치는 Composer를 사용하여 처리됩니다. 설치 과정을 설명하고 싶다면 Sitepoint가 최근 여기에 훌륭한 기사를 게시했습니다. 내 웹 사이트에 별도의 프런트엔드 및 백엔드 구성 요소가 있더라도 기본 애플리케이션 템플릿을 사용하는 경향이 있습니다. 대신에 저는 웹사이트의 백엔드 부분에 모듈을 사용하기로 결정했습니다. (Yii 모듈은 기본 애플리케이션 내부에 있는 미니 애플리케이션으로 가장 잘 설명됩니다.)

참고: 다음 예에서는 간단한 템플릿부터 디렉터리 구조 사용에 이르기까지 많은 디렉터리 참조가 사용되었습니다.

2. 현대 기술을 활용하세요

Yii는 순수한 객체 지향 프레임워크이며 지연된 정적 바인딩, SPL 클래스 및 인터페이스, 익명 함수 등 PHP의 고급 기능 중 일부를 활용합니다.

PSR-4 호환 자동 로더를 활용할 수 있는 모든 클래스 네임스페이스. 이는 Yii의 HTML 도우미 클래스를 포함하는 것이 다음과 같이 간단하다는 것을 의미합니다.

use yii\helpers\Html;
로그인 후 복사

Yii를 사용하면 별칭을 정의하여 네임스페이스를 단순화할 수도 있습니다. 위의 예에서 use 문은 기본적으로 /vendor/yiisoft/yii2/helpers 디렉터리에 있는 클래스 정의를 로드합니다. 이 별칭은 79행의 BaseYii 클래스에 정의되어 있습니다. 🎜>

public static $aliases = ['@yii' => __DIR__];
로그인 후 복사
프레임워크 자체는 Extension인 Composer를 사용하여 설치됩니다. 확장 기능을 게시하는 과정도 자신만의 작곡가.json을 만들고 Github에서 코드를 호스팅하고 확장 기능을 Packagist에 나열하는 것만큼 쉽습니다.

3. 확장성이 뛰어남

Yii는 보기에도 멋져 보이지만 필요에 따라 사용자 정의하기도 매우 쉽습니다. 프레임워크의 거의 모든 구성 요소는 확장 가능합니다. 간단한 예는 뷰에 고유한 주체 ID를 추가하는 것입니다. (이 작업을 수행하려는 이유가 궁금하다면 이 기사를 읽어보세요.)

먼저 appcomComponents 디렉토리에 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 . '"' : '';
  }
 
}
로그인 후 복사
그런 다음 기본 레이아웃 파일(appviewslayoutsmain.php)에서 HTML의 body 태그 안에 다음 코드를 추가합니다.



<body <&#63;=$this->BodyIdAttribute&#63;>>
로그인 후 복사
마지막으로 기본 구성 파일에 다음 코드를 추가하여 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 형식은 /controller/action이 아닌 index.php/controller/action입니다.
  • 테스트할 때는 프로덕션 데이터베이스가 아닌 테스트 데이터베이스를 사용해야 합니다.
Codeception에는 Yii 프레임워크 테스트에 특별히 사용되는 특수 모듈이 있습니다. 기능 테스트 중에 Active Record(Yii의 ORM)가 제대로 작동할 수 있도록 TestGuy 클래스에 몇 가지 메서드를 추가합니다. 예를 들어, 등록 양식이 사용자 이름 testuser를 사용하여 사용자 개체를 성공적으로 생성했는지 확인하려면 다음을 수행할 수 있습니다.



$I->amOnPage('register');
$I->fillField('username', 'testuser');
$I->fillField('password', 'qwerty');
$I->click('Register');
$I->seeRecord('app\models\User', array('name' => 'testuser'));
로그인 후 복사


5. 简化的安全方案

安全性是任何web应用的重要组成部分,幸运的是Yii有许多很棒的特性能帮你减轻负担.

Yii 带来了一个安全性 应用程序组件,它暴露了一些可以帮助可以用来创建一个更加安全的应用程序的方法. 其中一些相对而言更加有用的方法有:

generatePasswordHash: 从一个密码和一个随机的盐值生成一个安全的哈希值. 这个方法会为你创建一个随机的盐值,然后使用PHP的 crypt 函数来根据所提供的字符串创建一个哈希值.

validatePassword: 这是一个可以同 generatePasswordHash 搭配使用的方法, 并可以让你检查用户提供的密码是否同你存储的哈希值匹配.

generateRandomKey: 可逆让你创建一个任何长度的随机字符串

Yii 会自动对所有非安全 HTTP 请求方法 (PUT, POST, DELETE) 的可用CSRF令牌进行检查, 并将在你使用 ActiveForm::begin() 方法创建你的开发表单标签时生成并输出一个令牌值. 这个特性可以通过编辑你的主配置文件,包含下面的代码来禁用:

  return [
    'components' => [
      'request' => [
        'enableCsrfValidation' => false,
      ]
  ];
로그인 후 복사

为了堤防跨站脚本XSS的攻击,Yii提供了另外一个叫做 HtmlPurifier 的辅助类. 这个类有一个名为 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' => ['&#63;']
        ],
        [
          'allow' => true,
          'actions' => ['create'],
          'roles' => ['@']
        ]
      ]
    ];
  }
  // ...
}
로그인 후 복사


上面的代码会告诉 DefaultControllerto 让访客用户访问login和view的action, 而不是create这个action. (问号 ? 是匿名用户的别名, 而 @ 表示的是已经被授权的用户).

RBAC 是一个可以在应用程序中指定那些用户可以执行特定的动作的强大方法. 它涉及为你的用户创建角色,为你的app定义权限,并然后为他们预期的角色使用这些角色. 如果你想要创建一个审核员(Moderator)的角色就可以使用这个方法, 并可以让所有分配到这个角色的用户可以对文章进行审核.

你也还可以使用 RBAC 定义规则, 它可以让你在特定条件下针对你应用程序的某些方面进行授权. 例如,你可以创建一个规则让用户可以编辑他们自己的文章, 而不能修改由其他人创建的文章.

6. 缩短开发时间

大多数的项目都包含了重复的任务,没有人想把时间浪费在这些重复工作上面。Yii 提供了一些工具来帮助你在这些任务上花费更少的时间,把大多数时间都用在定制应用来满足你客户的需求上。

其中最强大的一个工具就是“Gii”。Gii是一个基于web脚手架代码工具,它可以让你快速的创建一个代码模板如下所示:

  • Models
  • Controllers
  • Forms
  • Modules
  • Extensions
  • CRUD controller actions and views

Gii是高度可配置的。你可以设置它只从一个特定的环境加载。简单的编辑web配置文件如下:

 
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 创建一个新的看起来像下面这样的迁移模板:

<&#63;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.\n";
 
      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);
}
로그인 후 복사

然后为了确保我可以进行迁移的逆向操作,我就会编辑down方法:

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). 生成的配置模板如下所示:

<&#63;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
로그인 후 복사

最后,修改你的web应用程序配置文件,使用压缩后的资源.

'components' => [
  // ...
  'assetManager' => [
    'bundles' => require '/app/assets_compressed.php'
  ]
]
로그인 후 복사

注意: 你需要手动下载并安装这些额外的工具.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿