ホームページ > PHPフレームワーク > YII > yii フレームワークを選択した理由は何ですか?

yii フレームワークを選択した理由は何ですか?

王林
リリース: 2020-09-03 15:57:43
転載
2744 人が閲覧しました

yii フレームワークを選択した理由は何ですか?

# yii フレームワークを選択する 7 つの理由:

(推奨チュートリアル:

yii フレームワーク)

1. 簡単なインストール

Web 開発者にとって、時は金なりです。面倒なインストールや構成に時間を無駄にしたくない人はいません。

Composer がインストール プロセスを処理します。インストール プロセスの説明が必要な場合は、Sitepoint が最近これに関する記事を公開しました。以下で読むことができます。サイトにフロントエンドとバックエンドのコンポーネントが別々にある場合でも、私は基本的なアプリ テンプレートを使い続けることを好みます。代わりに、サイトのバックエンド部分にモジュールを使用することにしました。 (Yii モジュールは、メインアプリケーションに埋め込むために使用される、ミニアプリケーションを最もよく表現したものです。)

注: 次の例の多くは、単純なディレクトリ参照を使用しています。テンプレート。

2. 最新のテクノロジーを使用する

Yii は、PHP のその他の機能の一部を最大限に活用する純粋な OOP フレームワークです。高度な機能には、遅延静的バインディング、SPL クラスとインターフェイス、匿名関数が含まれます。

すべてのクラスは名前空間と呼ばれ、PSR-4 準拠のオートローダーを利用できるようになります。言い換えれば、Yii に HTML 補助クラスを含めると、同様に単純になります。

use yii\helpers\Html;
ログイン後にコピー

Yii は、名前空間を簡素化するためにエイリアスを定義することもできます。上の例では、 use ステートメントはクラス定義をロードし、ディレクトリ内のデフォルトのパスは /vendor/yiisoft/yii2/helpers です。このエイリアスは、BaseYii クラスの 79 行目で定義されています。

public static $aliases = ['@yii' => __DIR__];
ログイン後にコピー

フレームワーク自体は、その拡張機能と同様に Composer を使用してインストールされます。拡張機能の公開は、composer.json を作成し、コードを Github でホストし、拡張機能を Packagist にリストするだけで簡単です。 Yii は、ネームスペースを簡素化するためにエイリアスを定義することもできます。上の例では、 use ステートメントはクラス定義をロードし、ディレクトリ内のデフォルトのパスは /vendor/yiisoft/yii2/helpers です。このエイリアスは、BaseYii クラスの 79 行目で定義されています:

3. 高度なスケーラビリティ

Yii Justスーツのように大きく見えますが、実際にはニーズに合わせて簡単に調整できます。フレームワークのほぼすべてのコンポーネントは拡張可能です。簡単な例は、ビューに一意の本文 ID を追加することです。 (これを行う理由を知りたい場合は、この記事を参照してください)

まず、アプリで行います。 \components View.php というファイルを作成し、次の内容を追加します。

namespaceapp\components;
 
classView extendsyii\web\View {
 
    public$bodyId;
 
    /* Yii allows you to add magic getter methods by prefacing method names with "get" */
 
    publicfunction getBodyIdAttribute() {
        return($this->bodyId !='') ?'id="' . $this->bodyId .'"' : '';
    }
 
}
ログイン後にコピー

次に、メイン レイアウト ファイル (app \ views\layouts\main.php)、HTML の body タグに次の内容を追加したいと考えています: BodyIdAttribute?>>

最後に、Yii がデフォルトの View クラスの代わりに拡張 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',
        ],
    ],
];
ログイン後にコピー

使用该配置,将会发生如下几种情况:

1、 在功能测试和验收测试期间发送的任何一封邮件,将会被写入一个文件中,而不是被发送。使用该配置,将会发生如下这种情况:

2、 在你测试中的URLs将会采取这种格式: index.php/controller/action 而不是这种:/controller/action

3、 测试将会使用你的测试数据库,而不是你的产品数据库。

存在Yii框架中的特殊模块,同样也存在Codeception内。它TestGuy类中增加了几个方法,协助你在功能测试中的活动记录(Yii中的ORM)。举例来说,如果你想看看是否成功创建了一个用户名为“testuser”的新user,你可以做以下几点:

$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)进行自动检查,当你使用ActiveForm::begin()方法创建开放表单标签时,它会生成并输出一个token。通过编辑你的主配置文件可以禁止此功能,方法如下:

return[
    'components'=> [
        'request'=> [
            'enableCsrfValidation'=> false,
        ]
];
ログイン後にコピー

为了防止XSS,Yii提供了一个叫HtmlPurifier的辅助类。这个类有一个名为process的静态方法,并且会使用popular filter library过滤出同名的输出库。

Yii还包括备用类,用来进行用户身份验证和授权。授权分为两种类型:ACF(访问控制过滤器)和RBAC(基于角色的访问控制)。

这两种授权方法,较简单的要数ACF了,它是通过在你的控制器中添加以下行为方法来实现的:

useyii\filters\AccessControl;
 
classDefaultController extendsController {
    // ...
    publicfunction behaviors() {
        return[
            // ...
            'class'=> AccessControl::className(),
            'only'=> ['create','login','view'],
                'rules'=> [
                [
                    'allow'=> true,
                    'actions'=> ['login','view'],
                    'roles'=> ['?']
                ],
                [
                    'allow'=> true,
                    'actions'=> ['create'],
                    'roles'=> ['@']
                ]
            ]
        ];
    }
    // ...
}
ログイン後にコピー

上面的代码用于区分DefaultControllerto,允许guest用户的访问login 和view行为,而不是create 行为。(? 是一个匿名用户别名,@ 指的是已认证用户)。

RBAC是指那些用户可以在整个应用中执行特定操作行为的更有效的方法。包括为用户创建角色,定义app权限,然后使这些权限试用于相应的角色。如果你想创建一个Moderator的角色,并允许分配给该角色的所有用户批准文章。

你也可以使用RBAC定义角色,它允许你在特定条件下,授权访问应用的某些方面的自定义规则。例如,你可以创建一个规则,即允许用户编辑自己的文章,而不是那些其他人创建的。

6、缩短开发时间

大多数项目都会涉及一定的重复任务,没有人愿意浪费时间。而Yii提供的一些工具可以帮助你减少在这些任务中所花费的时间,将更多的时间用于定制让客户满意的应用。

在这些工具中,其中有一个名为“Gii”的工具最为强大。Gii是一个基于web的基架代码工具,可以让你快速创建代码模板:

·模型

·控制器

·形式

·模块

·扩展

·CRUD控制器行为和视图

Gii是高度可配置的。你可以将其设置为仅在特定的环境下加载。只需简单编辑下你的web配置文件即可,方法如下:

if (YII_ENV_DEV) {
    // ...
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        'allowedIPs' => ['127.0.0.1', '::1']
    ]
}
ログイン後にコピー

这样就可以确保党Yii的环境设置为开发的时候,Gii仅支持加载,并且它只通过本地主机访问时才会加载。

现在,让我们来看下模型生成器吧:


表名使用的是一个预输入控件,来试图猜测哪个表格与你的模型相关联,并且所有领域都有一个翻转工具,提示你如何填写出来。在用Gii生成它之前,你可以预览代码,并且所有代码模板是完全可以自定义的。

还有几个命令行工具可以帮你为你的自动化测试创建数据库迁移,信息翻译(I18N:国际化)和数据库fixtures 代码模板。例如,你可以使用如下命令创建一个新的数据库迁移文件:

yii migrate/create create_user_table
ログイン後にコピー

这将会在 {appdir}/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.\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 数据缓存。

默认情况下,如果你正在使用Active Record,然后Yii会运行一个额外的查询,来确定表参与生成模型的架构。你可以通过编辑注配置文件设置应用程序,从而缓存这些架构:

return [
    // ...
    'components' => [
        // ...
        'db' => [
            // ...
            'enableSchemaCache' => true,
            'schemaCacheDuration' => 3600,
            'schemaCache' => 'cache',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
    ],
];
ログイン後にコピー

最后,Yii有一个命令行工具,使前端资源极简化更容易。只需运行以下命令来生成配置模板:

./yii asset/template config.php
ログイン後にコピー

然后,编辑该配置来指定工具,达到你想要的简化效果(如关闭编译器, YUI Compressor,或UglifyJS)。生成的配置模板,如下所示:

<?php
    return [
        &#39;jsCompressor&#39; => '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' => '',
        ],
    ];
ログイン後にコピー

接着,运行此控制台命令来实现压缩:

'components' => [
    // ...
    'assetManager' => [
        'bundles' => require '/app/assets_compressed.php'
    ]
]
ログイン後にコピー

注意:你必须要手动下载和安装这些外部工具。

结论:

像任何一个好的框架一样,Yii能够帮助你快速创建流行的web应用,并确保它们可以做的很好。通过做许多繁琐的事情,它帮你你创建安全的和可测试的网站。你可以轻松的使用它提供的大部分功能,或者你也可以修改其中任何一个来适应你的需求。真心建议你在你的下一个web项目中考虑一下它!

以上がyii フレームワークを選択した理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート