検索
ホームページバックエンド開発PHPチュートリアルMagento 開発ノート 5_PHP チュートリアル

Magento 開発ノート 5_PHP チュートリアル

Jul 14, 2016 am 10:07 AM
magento確保する同期するそして存在するどうやってプロジェクト開発する速いデータベースはい生産ノート反復する

迅速に反復するプロジェクトでは、開発データベースと実稼働 (ライブネットワーク) データベースの同期を確保する方法が頭の痛い問題です。 Magento は、リソース移行バージョンを作成するためのシステムを提供しており、開発プロセス中に常に遭遇するこの問題に対処するのに役立ちます。 www.2cto.com

前回はウェブログ投稿モデルを作成しました。今回はCREATE TABLEを直接実行します。モジュールのセットアップ リソースを作成し、このリソースによってテーブルが作成されます。インストールされたモジュールをアップグレードするアップグレード スクリプトも作成します。全体的に
1. 設定に SetupResource を追加します
2.リソースクラスファイルを作成します
3. インストーラースクリプトを作成します
4. アップグレードスクリプトを作成します
セットアップリソースを追加
セクションに次の
を追加します。
セットアップ>
core_setup
接続>
リソース>
タグは、SetupResource を一意に表すために使用されます。通常、modelname_setup の使用が推奨されます。モジュールの Pachagename_Modulename は、XStarX_Weblog タグの下に含める必要があります。最後に、XStarX_Weblog_Model_Resource_Mysql4_Setup には、作成するセットアップ リソース クラスの名前を含める必要があります。基本的なスクリプトの場合、独自のクラスを作成する必要はありませんが、そうすることで後で柔軟性が高まります。
設定を追加した後、キャッシュをクリアしてMagentoサイトをロードすると、何か異常なことがわかります
致命的なエラー: クラス 'XStarX_Weblog_Model_Resource_Mysql4_Setup' が
に見つかりません
Magento は、config で宣言したクラスをインスタンス化しようとしましたが、見つかりませんでした。 app/code/local/XStarX/Weblog/Model/Resource/Mysql4/Setup.php のようなクラス ファイルを作成する必要があります
classXStarX_Weblog_Model_Resource_Mysql4_Setup extendsMage_Core_Model_Resource_Setup { }
ここで Magento Web サイトをリロードすると、例外が消えます。
インストールスクリプトを作成する
次に、インストールスクリプトを作成します。スクリプトには前の CREATETABLE ステートメントが含まれています。
まず、config.xmlを見てください
0.1.0バージョン>
モジュール>
この部分は構成ファイル内で必要であり、モジュールをマークし、バージョンも示します。インストール スクリプトはバージョンに基づいている必要があります。次の場所にファイルを作成します
app/code/local/XStarX/Weblog/sql/weblog_setup/mysql4-install-0.1.0.php
echo 'このアップグレードの実行: '.get_class($this)."n
n";
die(「とりあえず終了」);
パスの weblog_setup 部分は、config.xml ファイル と一致します。 0.1.0 の部分はモジュールのバージョンと一致します。キャッシュをクリアしてページをロードすると、
が表示されます
このアップグレードの実行:Alanstormdotcom_Weblog_Model_Resource_Mysql4_Setup 一旦終了します ...
これは、更新スクリプトが実行されたことを意味します。最終的には SQL 更新ファイルをここに配置しますが、今はセットアップ メカニズムに焦点を当てます。 die ステートメントを削除します。
echo 'このアップグレードを実行しています:'.get_class($this)."n
n";
ページをリロードすると、ページの最初の部分にアップグレード メッセージが表示されます。リロードすると、ページは通常の状態に戻ります。セットアップは一度しか行われないためです。常にセットアップすることは不可能です。
インストールスクリプトを作成する
MagenoSetup リソースを使用すると、インストール スクリプトとアップグレード スクリプトを配置するだけで、システムがそれらを自動的に実行します。これにより、システム内のデータ移行スクリプトを一度だけ維持できるようになります。
データベースクライアントを使用して core_resroucetable を表示します
mysql> core_resource から * を選択します。
+-------------------------+-----------+ |code ---------- --------+-----+
|管理者通知セットアップ 1.0.0 |
| 0.7.1 |
| アマゾンペイメント_セットアップ |
| 0.8.1 |
| バックアップセットアップ
| バンドルセットアップ 0.1.7 |
| カタログインデックス_セットアップ
| カタログ在庫_セットアップ |
| カタログルール_セットアップ |
| カタログ検索_セットアップ
| 0.7.69 |
| 0.9.3 |
| クロノペイ_セットアップ |
| 0.7.8 |
| コンパイラ_セットアップ
|連絡先セットアップ 0.8.0 |
| コアセットアップ 0.8.13 |
| 0.7.1 |
| 顧客セットアップ 0.8.11 |
| サイバーマットセットアップ 0.1.0 |
| サイバーソースセットアップ 0.7.0 |
| 0.7.4 |
| ディレクトリセットアップ 0.8.5 |
| ダウンロード可能なセットアップ
| 0.7.13 |
| 0.1.0 |
| 0.1.1 |
| ギフトメッセージのセットアップ |0.7.2 |
| グーグルアナリティクスセットアップ 0.1.0 |
| 0.1.1 |
| 0.7.3 |
| グーグルオプティマイザー_セットアップ |
| 0.1.0 |
| 0.7.6 |
| ニュースレター_セットアップ
| 0.8.10 |
| ペイボックスセットアップ 0.1.3 |
| ペイゲートセットアップ 0.7.0 |
| 支払い_セットアップ
| paypaluk_setup | 0.7.0 |  
| paypal_setup | 0.7.2 |  
|ポールセットアップ | 0.7.2 |  
| productalert_setup | 0.7.2 |  
| protx_setup | 0.1.0 |  
|評価設定 | 0.7.2 |  
| reports_setup | 0.7.7 |  
| review_setup | 0.7.4 |  
| salesrule_setup | 0.7.7 |  
| sales_setup | 0.9.38 |  
| sendfriend_setup | 0.7.2 |  
| Shipping_setup | 0.7.0 |  
| sitemap_setup | 0.7.2 |  
| Strikeiron_setup | 0.9.1 |  
| tag_setup | 0.7.2 |  
| Tax_setup | 0.7.8 |  
| usa_setup | 0.7.0 | 
| weblog_setup | 0.1.0 |  
| weee_setup | 0.13 |  
| wishlist_setup | 0.7.4 | 
+---------------------------+----------+ 59 行セット (0.00 秒)
このテーブルには、すべてのインストールモジュールのリストと、対応するバージョンが含まれています。
| weblog_setup | 0.1.0 |  
これは、Magento が再実行の必要がないことをどのように認識するかです。すべてが成功した場合は、ページが追加されます。
DELETE from core_resource where code = 'weblog_setup';
その後删除对应のテーブル
ドロップテーブル blog_posts; 
次にセットアップ脚本里增加
$インストーラー = $this; 
$installer->startSetup(); 
$installer->run("
テーブルの作成 `{
$installer->getTable('weblog/blogpost')}`(
`blogpost_id`int(11) NOT NULL auto_increment,
`タイトル`テキスト、
「投稿」テキスト、
`date`datetime デフォルトは NULL、
`timestamp`timestamp NOT NULL デフォルト CURRENT_TIMESTAMP, PRIMARY KEY (`blogpost_id`) )
ENGINE=InnoDBDEFAULT CHARSET=utf8;      
INSERTINTO `{$installer->getTable('weblog/blogpost')}` VALUES (1,'My NewTitle','これはブログ投稿です','2009-07-01 00:00:00',' 2009-07-02 23:12:30');         ");
$インストーラー->endSetup();
キャッシュを削除し、ページを追加すると、新しく作成されたブログ投稿を閲覧でき、データが 1 件あります。
创建設置脚本---问题
上面のインストールは可能ではありません会那么顺利、在magento1.7下面会报错
Mage_Eav_Exception: テーブルを作成できません: module_entity
决呢をどのように解決しますか?
createEntityTables() メソッドをデバッグします、结尾で見ることができます
$connection->beginTransaction(); try { foreach ($tables as $tableName => $table) { $connection->createTable($table);     } $connection->commit(); catch (Exception $e) { Zend_Debug::dump($e->getMessage());    $connection->rollBack();    throw Mage::Exception('Mage_Eav', Mage::helper('eav')->__('テーブルを作成できません: %s', $tableName)); }
查看最下層错误:UserError: DDL ステートメントはトランザクションでは許可されません
その後跟进コミット関数
/** * DDL クエリの場合はトランザクション レベルを確認します * * @param string|Zend_Db_Select $sql * @throws Zend_Db_Adapter_Exception  */ protected function _checkDdlTransaction($sql) { if (is_string($sql) && $this->getTransactionLevel() > 0) { $startSql = strto lower(substr(ltrim($sql) 、0、3));         if (in_array($startSql, $this->_ddlRoutines)) { trigger_error(Varien_Db_Adapter_Interface::ERROR_DDL_MESSAGE, E_USER_ERROR);         } } }
Mysql は DDL トランザクションをサポートしていません。
したがって、app/code/local/{CompanyName}/{ModuleName}/Setup/Helper.php里重写createEntityTableメソッド
{ ... /**         * エラーの問題のため、トランザクション コードを削除しました。          */ //$connection->beginTransaction();         try { foreach ($tables as $tableName => $table) { $connection->createTable($table);             } $connection->commit();        catch (Exception $e) { //$connection->rollBack();            throw Mage::Exception('Mage_Eav', Mage::helper('eav')->__('テーブルを作成できません: %s', $tableName));        } } }
その後深刻な問題が発生します。
セットアップ脚本断面分析
让我们一行一行の解释。最初
$インストーラー = $this; 
各インストール スクリプトはすべて SetResource クラスから実行されます (つまり、私が上で作成したものです)。これは、画面内の $this 参照がこの種の参照であることを意味します。必要でない限り、コア システムでのインストール スクリプトの大部分が実行されます。これは $this 命名の未インストーラーです、これも同様です。
次来我们看了二つの方法
$installer->startSetup(); 
//...
$インストーラー->endSetup(); 
如果查看Mage_Core_Model_Resource_Setup类(目录app/code/core/Mage/Core/Resource/Setup.php)、次の内容を閲覧できます
パブリック関数 startSetup()
{
$this->_conn->multi_query("
SET SQL_MODE=''; 
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'; ");
$this を返します。     
}
パブリック関数 endSetup()
{
$this->_conn->multi_query("
SET SQL_MODE=IFNULL(@OLD_SQL_MODE,'');
SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS,0); ");
$これを返します。
}
ついに実行します
$インストーラー->実行(...);
これはデータベースの作成を含む SQL を受け入れます。セミコロンで区切るだけで、任意のクエリを定義できます。同時にこちらにも注目してください
$installer->getTable('ウェブログ/ブログ投稿')
getTable メソッドを使用すると、Magento モデル URI を渡して、そのテーブル名を取得できます。必要がない場合は、この方法を使用してください。 Mage_Core_Model_Resource_Setup クラスには、多くの便利なヘルパー メソッドが含まれています。最も効果的な学習方法は、Magento コアのインストーラー スクリプトを学習することです。
モジュールのアップグレード
上記はデータテーブルを初期化する方法を説明しましたが、既存のインクフレグランスの構造を変更するにはどうすればよいでしょうか? Magento のセットアップ リソースは、スクリプトを自動的に実行してモジュールをアップグレードできるようにするシンプルなバージョン戦略をサポートしています。
Magento がインストール スクリプトを実行すると、別のインストール スクリプトは再度実行されません。この時点で、アップグレード スクリプトを作成する必要があります。アップグレード スクリプトはインストール スクリプトとよく似ていますが、いくつかの重要な違いがあります。
まず、次の場所にスクリプトを作成します。
XStarX/Weblog/sql/weblog_setup/mysql4-upgrade-0.1.0-0.2.0.php
echo 'システムのバージョン番号の更新を避けるために、アップグレード スクリプト (mysql4-upgrade-0.1.0-0.2.0.php) をテストし、実行を停止します
';
死ぬ();
アップグレード スクリプトとインストール スクリプトは同じディレクトリにありますが、少し異なります。まず、ファイル名に upgrade が含まれている必要があります。次に、「-」で区切られた 2 つのバージョン番号が必要です。 1 つ目はアップグレードのソース バージョンで、2 つ目はアップグレードのターゲット バージョンです。
キャッシュをクリアした後、ページは再読み込みされますが、この時点ではスクリプトは実行されません。アップグレードをトリガーするには、config.xml のバージョン情報を更新する必要があります
モジュール>
新しいバージョン番号を書き込んだ後、キャッシュをクリアして Web サイトをロードすると、出力が表示されます。この時点で注意が必要な重要な点がもう 1 つあるため、急いでこの手順を実行しないでください。同じディレクトリに別のファイルを作成しましょう
XStarX/Weblog/sql/weblog_setup/mysql4-upgrade-0.1.0-0.1.5.php
echo 'アップグレード スクリプト (mysql4-upgrade-0.1.0-0.1.5.php) をテストしていますが、実行は停止していません
';
この時、キャッシュをクリアしてページを読み込むと、2つの情報が表示されます。 Magento はバージョン番号情報が変更されたことを検出すると、すべての実行可能なスクリプトを実行してモジュールを更新します。 0.1.5 バージョンを作成していないにもかかわらず、Magento はアップグレード スクリプトを認識し、それを実行しようとします。スクリプトは通常、低位から高位の順序で実行されます。以下のデータはこれを説明します
mysql> select * from core_resource where code = 'weblog_setup';
| コード | +--------------+--------+
| ウェブログ_セットアップ | +--------------+-------+
セット内の 1 行 (0.00 秒)
データシートのバージョンは 1.5 であることがわかります。これは、1.0 から 1.5 にアップグレードしましたが、1.0 から 2.0 へのアップグレードを実行していないためです。さて、この重要な問題を説明した後、本題に戻りましょう。スクリプトに戻り、まずアップグレード スクリプト 0.1.0-0.2.0 を変更します
$インストーラー = $this
;
$インストーラー->startSetup();
$installer->run("
ALTER TABLE `{$installer->getTable('weblog/blogpost')}`
投稿テキストを変更します ");
$インストーラー->endSetup();
die(「なぜこれがここにあるのかはすぐにわかります」);
ページを更新しても何も起こりません。アップグレード スクリプトが実行されないのはなぜですか?
1.weblog_setup リソースはバージョン 0.1.0 です
2. モジュールを 0.2.0 にアップグレードしたいです
3. Magento はアップグレード モジュールを認識し、実行するスクリプトは 0.1.0-0.1.5 と 0.1.0-0.2.0 の 2 つあります
4. Magento はキューをロードして実行します
5. Magento は 0.1.0 から 0.1.5 までのスクリプトを実行します
6. Weblog_setup リソースは 0.1.5 になりました
7. Magento は 0.1.0 から 0.2.0 までのスクリプトを実行し、実行が停止します
8. 次のページがロードされると、Magento は weblog_set がバージョン 0.1.5 であることを認識しますが、0.1.5 以降に実行されたスクリプトは認識されません (以前のスクリプトは 0.1.0 から開始されました)
正しい方法は次のとおりです、ファイル名を変更します
mysql4-upgrade-0.1.0-0.1.5.php #これは 0.1.0 から 0.1.5 になります
mysql4-upgrade-0.1.5-0.2.0.php #これは 0.1.5 から 0.2.0 になります
Magento は一度ロードされると 2 つのアップグレードを完了できます。 core_resource テーブルの情報をクリアして、最終テストを完了できます
core_resource セットのバージョン = '0.1.0' を更新します (コード = 'weblog_setup')。
Magento は設定ファイルに基づいてアップグレードを実行するため、共同開発中のスクリプトの追加には注意してください。

http://www.bkjia.com/PHPjc/477854.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477854.html技術記事迅速に反復されるプロジェクトでは、開発データベースと実稼働 (ライブ ネットワーク) データベースの同期を確保する方法が頭の痛い問題です。 Magento は、リソースの移行バージョンを作成するためのシステムを提供します...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

神話を暴く:PHPは本当に死んだ言語ですか?神話を暴く:PHPは本当に死んだ言語ですか?Apr 16, 2025 am 12:15 AM

PHPは死んでいません。 1)PHPコミュニティは、パフォーマンスとセキュリティの問題を積極的に解決し、PHP7.xはパフォーマンスを向上させます。 2)PHPは最新のWeb開発に適しており、大規模なWebサイトで広く使用されています。 3)PHPは学習しやすく、サーバーはうまく機能しますが、タイプシステムは静的言語ほど厳格ではありません。 4)PHPは、コンテンツ管理とeコマースの分野で依然として重要であり、エコシステムは進化し続けています。 5)OpcacheとAPCを介してパフォーマンスを最適化し、OOPと設計パターンを使用してコードの品質を向上させます。

PHP対Pythonの議論:どちらが良いですか?PHP対Pythonの議論:どちらが良いですか?Apr 16, 2025 am 12:03 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトの要件に依存します。 1)PHPは、Web開発に適しており、学習しやすく、豊富なコミュニティリソースですが、構文は十分に近代的ではなく、パフォーマンスとセキュリティに注意を払う必要があります。 2)Pythonは、簡潔な構文と学習が簡単なデータサイエンスと機械学習に適していますが、実行速度とメモリ管理にはボトルネックがあります。

PHPの目的:動的なWebサイトの構築PHPの目的:動的なWebサイトの構築Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHP:データベースとサーバー側のロジックの処理PHP:データベースとサーバー側のロジックの処理Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

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