Yii2 フロントエンドとバックエンドの分離と移行の使用 (7)、yii2maigrate_PHP チュートリアル
Yii2 フロントエンドとバックエンドの分離と mit の使い方 (7), yii2mite
最近他の事で忙しくて (実は怠け者です!)、「Yii2 徹底理解」を読みました。最初に理解できなかったことが少しわかってきたので、yii2の画像アップロードやその他の処理、リッチテキスト、Restfulなども見てみましたが、ここまでたどり着かなかったので、見るだけででは機能しないので、ステップごとに説明し、最初にフロントエンドとバックエンドの分離について説明します。 (実際には、通常のコンテンツ管理サイトでは、以下に示す完全な分離は必要ありません。見ておいて損はありません)
個人的には、フロントエンドとバックエンドにはいくつかの状況があると感じています。1つ目は、フロントエンドとバックエンドが検証システムを使用しているかどうかです。データテーブルを共有します。
一般的には、次の 3 つがよく使用されます:
A. 検証システムとデータテーブルを共有します。
B. 2 つの検証システムが 1 つのデータ テーブルを共有します。
C、2 つの検証システムと 2 つのデータ テーブル。
Yii2 Advanced Edition のデフォルトバージョンはタイプ A、つまりデータテーブルが同じで、一方がログイン/ログアウトし、もう一方もログイン/ログアウトするこの構造の方が適していると感じます。投稿や返信などの機能は同じで、テーブルのフィールドも基本的に同じです(個人的にはそう思っていますが、結局のところ、私にはあまりありません)。私もインターネットでさまざまなバックエンド構築に関するトピックを検索しましたが、詳細な議論はほとんどありません。これは、フィールドと権限を通じて行うことができます。私たちがやろうとしているのは、一部の電子商取引 Web サイトなどのタイプ C です。バックエンド管理者とフロントエンドのメンバーシップ機能は大きく異なり、テーブルのフィールドも大きく異なるため、検証システムも異なります。データテーブルが 2 つあるとよいでしょう。タイプBはタイプCの簡易版です。Cが設定できればBも同様です。
次に、最初に管理者データを保存するための管理テーブルを作成しますが、メンバーは引き続き元のユーザー テーブルを使用して作成します。これについては、Yii2 の初期化の章で説明しました。
1. yii2 バージョン 2.07 より前では、コマンドを使用して console/migrations ディレクトリに php ファイルを作成し、このファイルの下に create table ステートメントを記述することができます。
yii 管理者の移行/作成
2. yii2 バージョン 2.07 以降、より詳細な分類が追加されました。たとえば、admin テーブルを作成しましたが、ステータス フィールドがありません。その後、次のコマンドを使用してフィールドのみを追加したファイルを生成できます。
リーリー
リーリー
ここでは、どのテンプレートを指しているかを決定するための通常の一致 add_xxx_to_xxx があり、それによってさまざまなスタイルが生成されていることがわかります。
移行/作成の背後にあるパラメータに従って、これらのスタイルは合計で一致します:
注: yii help maigration をコンソールで直接使用して、さらに多くの使用状況を表示できます
コンソールファイルに新しいビューフォルダーを作成し、上で変更したいテンプレートをコピーしてここで変更し、console/config/main.phpで変更します
リーリー
generatorTemplateFiles 設定では、これら 5 つをすべて記述する必要があることに注意してください。変更しない場合は、元のパスを Vendor/yiisoft/yii2/console/MigrateController.php で参照できます。書き込まれていないコマンドテンプレートを使用するとエラーが報告されます。
テーブルの作成やフィールドの追加といった具体的なステートメントの書き方については、実はバージョンの違いで2通りの書き方があります(2.06の新しい書き方) まだ中国語版のyii2ガイドは見ないでください。更新されました。ここをクリックして更新された英語版をご覧ください。これには、上記の内容と具体的な書き方が含まれています。上記の原則を理解するために、Google で検索してソース コードを読むのに多くの時間を費やしましたが、後でそれがすべて英語版で書かれていることがわかりました。そして、最近、キーワードが見つかりませんでした。 Yii 英語公式 Web サイトの API ドキュメントの結果が表示されます。ここに問題があるのか、公式 Web サイトに問題があるのかはわかりません。中国語のガイドと英語のガイドを比較するしかありません。なので、英語の方が良かったらいいのですが、英語のドキュメントを見てください。
目前自己修改了create_table时加表注释、段注释(这个搜索及查源码没找到类似->comment的写法,可能是为了兼容其它数据库,所以只能拼接,而写段注释的好处是,gii 生成model时attributeLabels方法可以直接根据注释来显示对应的中文名字),add_column和drop_column模板增加一个示例注释,方便忘了用法时参照注释的示例来写,而且这样就不用加--fileds参数了。呃,这里贴一下自己的模板和最终应该建立的admin表的语句吧:
模板createTableMigration.php:
<?php /** * This view is used by console/controllers/MigrateController.php * The following variables are available in this view: */ /* @var $className string the new migration class name */ /* @var $table string the name table */ /* @var $fields array the fields */ echo "<?php\n"; ?> use yii\db\Migration; class <?= $className ?> extends Migration { const TBL_NAME = '{{%<?=$table?>}}'; public function up() { $tableOptions = null; if ($this->db->driverName === 'mysql') { $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB COMMENT="填写表注释"'; } $this->createTable(self::TBL_NAME, [ <?php foreach ($fields as $field): ?> <?php if ($field == end($fields)): ?> '<?= $field['property'] ?>' => $this-><?= $field['decorators'].".\" COMMENT '填写段注释'\"" . "\n"?> <?php else: ?> '<?= $field['property'] ?>' => $this-><?= $field['decorators'].".\" COMMENT '填写段注释'\"" . ",\n"?> <?php endif; ?> <?php endforeach; ?> ],$tableOptions); } public function down() { $this->dropTable(self::TBL_NAME); } }
具体语句m160326_133655_create_admin.php:
<?php use yii\db\Migration; class m160427_133556_create_admin extends Migration { const TBL_NAME = '{{%admin}}'; public function up() { $tableOptions = null; if ($this->db->driverName === 'mysql') { $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB COMMENT="后台管理员表"'; } $this->createTable(self::TBL_NAME, [ 'id' => $this->primaryKey(), 'username'=>$this->string()->notNull()->unique()." COMMENT '用户名'", 'auth_key'=>$this->string(32)->notNull()." COMMENT '认证Key'", 'password_hash'=>$this->string()->notNull()." COMMENT '密码'", 'password_reset_token'=>$this->string()->unique()." COMMENT '密码重置Token'", 'email'=>$this->string()->notNull()->unique()." COMMENT '邮箱'", 'status'=>$this->smallInteger()->notNull()->defaultValue(10)." COMMENT '状态'", 'created_at' => $this->integer()->notNull()." COMMENT '创建时间'", 'updated_at' => $this->integer()->notNull()." COMMENT '更新时间'", ],$tableOptions); } public function down() { $this->dropTable(self::TBL_NAME); } }
继续运行下述命令行代码,即可生成admin表,由于只是做演示,所以admin和user表基本一样,不要在意这些细节。
yii migrate
好了,生成两个表后,我们就需要将前台登录和后台登陆彻底分开了:
1、前台修改:由于已经不公用了,所以先把公用的common/models中的User.php和LoginForm.php移动到frontend/models中去,顺便将这两个文件的命名空间改为以frontend开头,将整个前台文件看一遍,把所有涉及到这两个common文件命名空间的需要都改为前台自己的命名空间。
2、后台修改:同样需要在backend/models中有这两个文件Admin.php和LoginForm.php,可以使用Gii生成(需要注意要继承IdentityInterface,实现此接口内的方法以及参照User.php来实现相关登录注册方法),也可以直接复制同样上面的两个文件(需要将User.php改名为Admin.php,且注意user表和admin表字段名称或个数是否一致,不一致则需要在Admin.php中修改)。由于我们原先创建过后台的GRUD,所以这里改动挺多的(searchModel,controller,view都需要改成admin的),建议对照着Gii生成的文件预览来改。哎,如果实际要前后台分离,本章应该放在第五章节的前面,那后台就不需要改这么多了。
现在可以登录前后台试试,等等,我们后台表虽然创建好了,但是还没有添加管理员,现在由于后台已经登陆不进去了,所以在后台内也无法创建了,并且注册功能也没有(这种分离下,后台一般没必要有注册功能),所以这里继续用console的功能来创建一个用户,控制台的功能挺多的,不仅仅是数据库管理,可以点这里了解下。
在console/controllers中新建InitController,然后如下代码:
<?php /** * Application initialization * 参照深入理解Yii2.0视频教程 */ namespace console\controllers; use backend\models\Admin; class InitController extends \yii\console\Controller { /** * Create init admin */ public function actionAdmin() { echo "Create init admin ...\n"; // 提示当前操作 $username = $this->prompt('Admin Name:'); // 接收用户名 $email = $this->prompt('Email:'); // 接收Email $password = $this->prompt('Password:'); // 接收密码 $model = new Admin(); // 创建一个新用户 $model->username = $username; // 完成赋值 $model->email = $email; $model->password = $password;//注意这个地方,用了Admin模型中的setPassword方法(魔术方法__set) if (!$model->save()) // 保存新的用户 { foreach ($model->getErrors() as $error) // 如果保存失败,说明有错误,那就输出错误信息。 { foreach ($error as $e) { echo "$e\n"; } } return 1; // 命令行返回1表示有异常 } return 0; // 返回0表示一切OK } }
InitController.php
然后再命令行中运行:
yii init/admin
按照提示来填写用户名密码等,便可以产生一条数据了,当我们查看这条记录时,发现我们填写的明文密码变成加密的了,而创建时间和更新和更新时间我们没填写也自动给填写了,前者是由于用了__set魔术方法,后者是用了“行为”,如果不是很理解请看《深入理解Yii2.0》,里面讲的比较详细。还有就是,可能在window下cmd运行中文乱码,大体搜了下没找到好的解决方法,不过可以试下Cygwin这个windows下可以运行linux命令的软件,挺好用的,设置成utf-8就不会乱码了,而且可以用gcc什么的。
3、现在我们前后台都能按照自己数据库里的数据来登录了,但是由于session等公用一个,所以还是退出时,前后台一起退出,需要进一步操作:可以参照这篇wiki。
后台,在backend/config/main.php或者main-local.php中
'components' => [ 'user' => [ 'identityClass' => 'backend\models\Admin', 'enableAutoLogin' => true, 'identityCookie' => [ 'name' => '_backendUser', // unique for backend ], ], 'session' => [ 'name' => 'PHPBACKSESSID', 'savePath' => sys_get_temp_dir(), ], 'request' => [ 'cookieValidationKey' => 'orGkZNZvZe3-4WicYHyGMS-EyI6Tp8yi',//random string 'csrfParam' => '_backendCSRF', ],
同样在前台,在frontend/config/main.php或者main-local.php中
'components' => [ 'user' => [ 'identityClass' => 'frontend\models\User', 'enableAutoLogin' => true, 'identityCookie' => [ 'name' => '_frontendUser', // unique for frontend ] ], 'session' => [ 'name' => 'PHPFRONTSESSID', 'savePath' => sys_get_temp_dir(), ], 'request' => [ 'cookieValidationKey' => '8rqO22WJ9yiAx_KuJ8SFnbKctqGDWi9J', 'csrfParam' => '_frontendCSRF', ],
这样再登陆试下,就会发现前后台完全没关联了。可以调用Yii::$app的功能,例如Yii::$app->user->id,如果是在后台的目录中,会显示后台的用户id,如果是在前台的目录中则会显示前台的用户id。可能有些强迫症患者想同Yii1那样用Yii::$app->admin->id来访问后台用户id,这个不太好实现,Yii2和Yii1相比,用户验证这块改动挺大的,web/User在Yii2框架中作为核心组件,如果要修改的话应该还要关联修改web/Application中的变量方法等,个人感觉没必要。
以上,就是所说的,其实还有很多已经集成好的yii2-user、带权限控制等的插件可以直接从composer中搜索使用。例如点击率最高的这个,可以配置B类型的验证,而且集成了更多功能。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Flask-Migrate: Python を使用したデータベースの移行 Web 開発の継続的な発展に伴い、データベースの重要性がますます高まっています。開発プロセス中に、データを変更および移行する必要があります。ただし、データベース上で直接変更すると、予期しないリスクが生じる可能性があります。このとき、Flask-Migrate が登場しました。この記事では、Flask-Migrate の使用方法と、Python を介してデータベースを移行する方法に焦点を当てます。フロリダ州

yii2 から jquery を削除する方法: 1. AppAsset.php ファイルを編集し、変数 $depends の「yii\web\YiiAsset」値をコメント アウトします; 2. main.php ファイルを編集し、設定「'yii」を以下に追加しますフィールド「components」\web\JqueryAsset' => ['js' => [],'sourcePath' => null,]," を使用して jquery スクリプトを削除します。

Java 9 のモジュール システムを使用してコードを分離および分離する方法 ソフトウェアの規模が拡大し続けるにつれて、コードの複雑さは増加し続けています。コードをより適切に編成および管理するために、Java9 ではモジュール システムが導入されました。モジュール システムの出現により、従来のパッケージの依存関係の問題が解決され、コードの分離と分離がより簡単かつ柔軟になりました。この記事では、Java 9 のモジュール システムを使用してコードの分離と分離を実現する方法を紹介します。 1. モジュールの定義 Java9 では module キーワードを使用してモジュールを定義できます。

タイトル: Golang のフロントエンドとバックエンドの分離開発におけるフロントエンド テクノロジの選択に関する提案 Web アプリケーションの複雑さと要求が増加し続けるにつれて、フロントエンドとバックエンドの分離開発モデルがますます普及しています。この開発モデルでは、バックエンドがビジネス ロジックの処理を担当し、フロントエンドがページの表示とユーザーとの対話を担当し、両者は API を介して通信します。 Golang をバックエンド言語として使用する開発チームにとって、適切なフロントエンド テクノロジを選択することは非常に重要です。この記事では、Golang でフロントエンドとバックエンドを個別に開発する場合に選択する推奨フロントエンド テクノロジについて説明します。

この記事では、yii2 フレームワークについて紹介し、いくつかの CTF 演習を共有し、それを使用して yii2 フレームワークを学習します。

PHP 開発者は、Web サイト開発プロセス中にデータベース操作に直面することがよくありますが、非常に人気のあるデータベース管理システムである MySQL の読み取りと書き込みの分離は、Web サイトのパフォーマンスを向上させる重要な手段の 1 つです。 PHP 開発では、MySQL の読み取りと書き込みの分離を実装すると、Web サイトの同時アクセス機能とユーザー エクスペリエンスが大幅に向上します。この記事では、MySQL の読み書き分離の実装方法を詳細に紹介し、PHP 開発者が読み書き分離機能をよりよく理解して適用できるように、具体的な PHP コード例を示します。 MySQLの読み取りとは何ですか

静的リソースの分離により Java Web サイトのアクセス速度を向上させるにはどうすればよいですか?インターネットの急速な発展に伴い、ウェブサイトを利用して情報を取得したりコミュニケーションをとったりする人が増えています。 Java Web サイトの場合、アクセス速度は非常に重要であり、ユーザー エクスペリエンスと Web サイトの成功に直接影響します。その中でも、静的リソースの読み込み速度は、Web サイトのアクセス速度に影響を与える重要な要素の 1 つです。この記事では、静的リソースの分離により Java Web サイトのアクセス速度を向上させる方法を紹介します。静的リソースとは何ですか? まず、静的リソースとは何かを明確にする必要があります。

1. yii2-redis のマスター ブランチの Windows バージョンを、composer でダウンロードする必要があります。 2. 解凍して、vendor/yiisoft にコピーします。 3. 'yiisoft/yii2-redis'=>array('name'=>'yiisoft) を追加します。 yiisoft /yii2-redis','version'=>'2.0 の extensions.php にコピーします。
