menschによる回答は、私が必要としているものではありません。index.phpファイルには触れたことがないので、ここで何を試しているのかを詳しく説明します。
私はこのサイトをガイドとして使用していますが、私自身の解説もあります!
http://www.paulmarshall.us/blog/migrating-from-cakephp-13-to-cakephp-20
(私もこれを見つけました:https ://github.com/dereuromark/upgradeこれは上記のチュートリアルが失敗した場合にショットする可能性があります。私はあまり熱心ではありませんが、非常に網羅的なドキュメントが好きです。
Put `CakePlugin::loadAll();` in your app bootstrap to make sure this plugin is loaded
私にとっては意味がありません...ファイルのフォルダを指定できますか?行を追加するファイル内の特定の場所はありますか?など...私は自分がしたことにこだわるつもりです!)
最初に、私のケーキが使用していたindex.phpが、cake2.1コードに付属しているindex.phpではないことに気づきました。理由はわかりませんが、「新しい」2.1 index.phpをコピーしました(はい、これはapp / webroot / index.phpファイルです)。新しいエラーが発生しました。
注意:未定義のインデックス:94行目の/cake_install/lib/Cake/Core/Configure.phpのエラー注意:未定義のインデックス:95行目の/cake_install/lib/Cake/Core/Configure.phpの例外致命的なエラー:クラス名は126行目の/cake_install/lib/Cake/Error/ErrorHandler.phpの有効なオブジェクトまたは文字列である
(ここで、cake_installは、私のケーキアプリが置かれているフォルダーです)
今これに取り組んでいます...
そして今、アップグレードツールがcore.phpファイルをアップグレードしなかったことがわかります-app / Config(2.1の場合はapp / config、1.3の場合)にあります...アップグレードツールは実際に何をしましたか?2.1バージョンを切り取って貼り付け(つまり、2.1コードのzipファイルから、その/app/Config/core.phpを取得して/ app / Configディレクトリに移動しました)、ソルトとセキュリティの値が交換されました。それでおしまい。
まだ運がない。だから今私はdatabase.phpファイルをアップグレードしました(これもapp/Configまたはapp/configにあります)〜私は変更しました
'driver' => 'mysqli',
に
'datasource' => 'Database/Mysqli',
ファイルをランダムに設定するのは楽しいです!
ああ、わかりました。コアとデータベースにアップグレードすると、エラーメッセージが変更されました...それでいいですか?彼らの自慢の「アップグレード」スクリプトが何をしたのかまだわからない...それはファイル名を変更しただけですか?本当に?
警告(2):file_put_contents(/cake_install/app/tmp/logs/error.log):ストリームを開くことができませんでした:アクセスが拒否されました[CORE / Cake / Log / Engine / FileLog.php、69行目]
注意(1024):app / Config / core.phpの「Security.cipherSeed」の値を、アプリケーションに固有の数値(数字のみ)のシード値に変更してください[CORE / Cake / Utility / Debugger.php、行810]
致命的なエラー:クラス'AppHelper'が/cake_install/lib/Cake/View/Helper/HtmlHelper.phpの31行目に見つかりません
わかりました。/cake_install/app/ tmp / logs /フォルダー(chmod 777 -R folderHere)と777
...暗号シードをアップグレードしたことはないと思います。わかりました、新しい番号を作りました!(暗号シードは何をしますか?ええと、ビングはあまり役に立ちませんでした-私はコードを読みました。Cookieからの暗号化/復号化に使用されているようです?わかりました、私はそれで生きることができます)
Bootstrap.php
zipファイルのブートストラップを自分のバージョンに移動しました(少しありがとう、アップグレードスクリプト!)。まだ変更を加えていませんが、プラグインをロードする必要があると思います...それは十分に文書化されていると確信しています(ハァッ!)
だから、それは私にこの誤りを残します:
致命的なエラー:クラス'AppHelper'が/cake_install/lib/Cake/View/Helper/HtmlHelper.phpの31行目に見つかりません
そしてもちろん、非常に自慢のケーキアップグレーダーは別のアップグレードを行うことができませんでした。このページをチェックしてください:http:
//book.cakephp.org/2.0/en/appendices/2-1-migration-guide.html
さて、ファイルを作成する必要があります-そのページにあるのと同じです。唯一のトリックは、はい、それはappフォルダーにあり、いいえ、cakePhpが作成した私のapp / Viewフォルダーには「ヘルパー」サブフォルダーがなかったということでした...したがって、AppHelper.phpの場合はヘルパーを作成する必要がありました/ app /View/の下のサブフォルダー。
..。
おい!今、私は背景とロゴを取得します...そしてこれら:
注意(8):未定義の変数:loggedIn [APP / pages / top_menu.html、3行目]
注意(8):未定義の変数:html [APP / pages / top_menu.html、25行目]
致命的なエラー:25行目の/cake_install/app/pages/top_menu.htmlにある非オブジェクトのメンバー関数link()を呼び出す
素晴らしい。$ htmlを使用できないことを意味するある種のクールな新しいケーキ2機能?それは...奇妙なことに、本当に適切なようです。
信じられない。今、私は$ this-> dataがどのように機能するかを変更する必要がありますか?どうして??どうして??なぜこの暴徒は、APIが浮動アイデアではなく、固定契約である傾向があることを理解できないのですか...ああ。それは大丈夫です、私が持っている最も使用されているケーキラインは今...間違っています。私はこれからscalaまたはdjangoで開発していますが、ジュニア言語は最悪です。
これが私が実行したものです:find。-type f -exec sed -i's / $ this-> data / $ this-> request-> data / g'{} \;
/appディレクトリに移動しました。この2.1...それは真剣に素晴らしい方が良いです...それを立ち上げるために誰もがしなければならない仕事の量。これは、私が思うに、ジュニア言語で作業する通常の日ですか?
素晴らしい、$ htmlの問題は、誰かが小文字を好まなかったために発生しますか?CakePHP2.0
でHtmlHelperを使用する場合の未定義
の変数そして解決策は次のとおりです:(SOの別の投稿に感謝します)
探す 。-type f -exec sed -i's / $ html / $ this-> Html / g'{} \;
そして当然、$sessionでも同じ問題が発生します-
探す 。-type f -exec sed -i's / $ session / $ this-> Session / g'{} \;
..。
物事がやってくる!今、私は不可解なエラーがあります:
コントローラクラスPagesControllerが見つかりませんでした。
ああ...の愛のために私はここにあるPagesControllerを移動する必要があります:
lib / Cake / Console / Templates / skel / Controller / PagesController.php
ここに置いて
app / Controller /
繰り返しになりますが、Cakeインストーラー/アップグレード担当者は仕事で眠っているようです。
そして今、私は持っています
ヘルパークラスJavascriptHelperが見つかりませんでした。
これはそれほど悪くはありません。「JavascriptHelper」への参照は見つかりませんが、「$helpers」配列に「Javascript」への参照はあります。バックエンドは、さらに難読化するためにヘルパーという単語を追加します。とにかく、私は自分のphpファイルで$ helpers配列を検索し、AppController(2.1)クラスで見つけました。
私はヘルパー(とにかくjavascriptのもの)が好きでも理解もしていないので、私はそれらを使用したことはありません。ある時点でやみくもにチュートリアルをたどって追加したに違いありません...しかし、私はそれを必要としないので、それは行きます!
そして今、私は持っていたすべてのctpファイルをクリーンアップする必要があります。そこでは、正しいhtmlが使用されていることを確認するために「require」を使用しました。もう一度、上から検索コマンドを使用して(「views」フォルダではなく「View」を指すようにします)ため息をつきます。わかりました、いいえ、それはそれほど単純ではありませんね?私が持っていた前の場所:
require(app / View / Pages / man_front.html)
私は今必要です:
require(/cake_folder/app/View/Pages/man_front.html)
(ケーキフォルダは私のすべてのケーキのものがある場所です。これがなぜであるかはわかりませんが、簡単な検索で修正されました:
find . -type f -exec sed -i 's/app\/View\/Pages/\/cake_folder\/app\/View\/Pages/g' {} \;
(\は/を「デパワー」します)
さて、それですべてを実行し、サイトをある種の許容可能なレベルに到達させたので、次は何ですか?さて、あなたは今いくつかのデータベースの問題を見つけるかもしれません:
警告(2):mysqli :: mysqli()は、パラメーター1が文字列であり、配列が[CORE / Cake / Model / ConnectionManager.php、行101]であると想定しています。
致命的なエラー:3383行目の/cake_install/lib/Cake/Model/Model.phpにある未定義のメソッドmysqli :: getSchemaName()を呼び出す
もちろん、これ以上mysqliはサポートされません。代わりにmysqlを使用するようにdatabase.phpを編集しました(つまり、末尾の「i」を削除しただけです)
(cakephpの覗き見の何が問題になっていますか?APIは、「既存のコードが壊れても、すべてを変更しないでください」という意味です。「変更!OBAMAAAAA!」ではなく、次のアップグレードで、すべてのコードをdjangoにプッシュします。または春またはスカラ。血色の良いナンセンス。)
次の問題は、私が使用している「コンポーネント」です。次のようなケーキエラーが発生します。
不足しているプラグイン
エラー:アプリケーションがアップローダープラグインからファイルを読み込もうとしています
エラー:プラグインアップローダーがapp / Pluginディレクトリにあり、ロードされていることを確認してください
<?php
CakePlugin::load('Uploader');
すべてのプラグインをロードする:すべてのプラグインを一度にロードする場合は、app / Config/bootstrap.phpファイルで次の行を使用します
CakePlugin::loadAll();
だから...私のコードはすべて破壊されているだけでなく、古いプラグインもすべて破壊されていますか?良い。
解決策は、アプリ/プラグインフォルダーを作成し(そうです、マジックアップグレーダーもそれを行いません)、次に、持っていたプラグインを確認します。今!これはコンポーネントとは異なります。まだどのようになっているのかわかりません-考えられる答えについては私の質問をチェックしてください:cakephp 2.1の「コンポーネント」と「プラグイン」の違いは?-しかし今は、「PLUGIN」フォルダと一般的なプラグインを見ているだけです。ケーキ1.3では、プラグインは次のようにリストされていたようです。
var $ components = array('Uploader.Uploader'、...);
つまり、ドット表記を使用します。私はそれと一緒に暮らすことができます。私の場合、Uploaderプラグインの最新バージョン(ありがたいことに、2.x互換にアップグレードされました!)を入手して、app/Pluginフォルダーに配置する必要がありました。
だから私は得た:
app
Plugin
Uploader
Config
Locale
<the other files here too!>
それは今はうまくいくようです、やったー!
次のエラーは次のとおりです。
警告(2):foreach()に無効な引数が指定されました[CORE / Cake / Utility / Set.php、1048行目]
警告(2):array_multisort()[ http://php.net/function.array-multisort]:引数#1は配列またはソートフラグであると予想されます[CORE / Cake / Utility / Set.php、行1087 ]
警告(2):array_unique()は、パラメーター1が配列であると想定しています。[CORE / Cake / Utility / Set.php、1089行目]を指定するとnullになります。
警告(2):foreach()に無効な引数が指定されました[CORE / Cake / Utility / Set.php、1091行目]
警告(2):ヘッダー情報を変更できません-ヘッダーはすでに送信されています(出力は/cake_install/lib/Cake/Utility/Debugger.php:761で開始されました)[CORE / Cake / Network / CakeResponse.php、395行目]
ああ、じゃあ。それは明らかです。コードのエラーが何であるかを知ってうれしいです。良いエラーメッセージ!
ばかげていると思いますが、最初の配列が空の場合でも、ユーティリティSet::Sortは引き続き機能すると思います。確かに、cakephpの人々は巨人の肩の上ではなく、額の上に立っています。
新しい2.1アップグレードはこのぼろぼろの慣習を廃止しているように思われるので、問題の配列が空かnullかを回避するために、Set:Sort呼び出しの前にチェックする必要があります。罰金。簡単ですが...おやおや。
そしてそれはそれを修正しました。
現在、FormHelperエラーが発生しています。ビューの$formが$this-> Formになっているように見えるので、これを置き換える別の簡単なスクリプトがあります。
探す 。-type f -exec sed -i's / $ form / $ this-> Form / g'{} \;
そして今、私が得る次のエラーは次のとおりです。
致命的なエラー:1804行目の/cake_install/lib/Cake/View/Helper/FormHelper.phpでサポートされていないオペランドタイプ
そして今、彼らはFormHelperの「select」メソッドを台無しにしてしまいました-以前、私はこれを持っていました:
echo $ this-> Form-> select('treatment_id'、$treatments、null、array('empty' =>'-評価する処理を選択-'));
私は今これを持っています:
echo $ this-> Form-> select('treatment_id'、$treatments、array('empty' =>'-評価する処理を選択-'));
そして今、私のコンポーネントの1つ(実際にはYou_tube_loader_component)が壊れていました。ヘッダーが次のようになるように変更する必要があります。
class YouTubeLoaderComponent extends Component {
function __construct(ComponentCollection $collection, $settings = array()) {
parent::__construct($collection, $settings);
...
}
}
以前は、unameとパスワードのvaleusをデフォルトに設定していましたが、今では、不思議な「設定」配列をいじくり回す代わりに、「...」セクションに貼り付けています。
次は:
警告(2):不正なオフセットタイプ[CORE / Cake / Model / Model.php、行2689]
警告(2):不正なオフセットタイプ[CORE / Cake / Model / Model.php、2665行目]
すっごくこれはケーキ1.3では取り上げられていない問題ですが、2.1では取り上げられています
問題は、参照されているコントローラーアクションに、タイプパラメーターなしの「検索」呼び出しがあることです。つまり、私は持っていた
$ results = $ this-> User-> find(array(...)、array(...)、null、false);
私が持っていたはずの場所:
$results = $this->User->find('first',array(
'conditions' => array("User.id" => ($this->Auth->user("id"))),
'fields' => array("User.confirmed")
)
);
私が抱えていたもう1つの問題は、何らかの理由で、次のチェックを行うことでした。
$ this-> set('loggedIn'、$ this-> Auth-> user('id'));
動作しませんでした。どうやら(方法/理由はわかりませんが)、2.xのcakePHP authは、すべてのユーザーの詳細をセッションに保存しなくなります。それがセッションにどの詳細を保存するのか、またはそれらを変更する方法がわかりません-それを調べてください!-しかし、私のコードは「id」値を保存していなかったので、上記のチェックでは常にloggedIn値をfalseに設定しました。
改善するために、私は次のように呼び出しを変更しました。
$ this-> set('loggedIn'、$ this-> Auth-> loggedIn());
それは私にとってはうまくいきました。
次の問題は、ユーザーにログインした後、thios-> auth-> user('id')が甘いものを何も返さないことです。幸いなことに、私はこの投稿に出くわしました、それは物事をより明確にしました:
http://ask.cakephp.org/questions/view/unable_to_access_logged-in_users_data_in_2_0
驚くべきことに、ケーキラボの天才たちは、ログインの仕組みを変えることで混乱を解消できると考えていました。正直なところ、私が混乱しているのは、ログイン後に認証コンポーネントがすべてのユーザーの詳細を利用できるという事実について誰が混乱したかということだけです。しかし、恐れることはありません。彼らは混乱を解消し、...削除しました。機能は完全に。
それで、あなたは何をしますか?上記のリンクは、すべてのユーザーの詳細を取得し、それを認証ログインセクションに送信することを提案しています。私はこれが特に好きではありませんが(それは愚かな問題であり、私は何も信じられないので、エレガントでないことが必要です)、それは私がしなければならないことです。提案を歓迎します!
だから、まあまあ混乱する代わりに:
if ($this->Auth->login($this->request->data)) {
... //argh! I am so confused by that line above!!!1
私は今持っています:
$user = $this->User->find('first', array(
'conditions' => array('User.email' => $this->request->data['User']['email'])
)
);
// Use the AuthComponent~Rs login action
if ($this->Auth->login($user['User'])) {
... //omg the extra check that the entry is in the db is just brilliant and efficient
それはそれほどすっきりしていて混乱が少ないのではないですか?よくやった、cakephpマーベリックス!
次のエラーは
許可アダプター「コントローラー」が見つかりませんでした。
これは少し曖昧です...
ああ!ここでスタックオーバーフローですでに回答済み:
承認アダプターがcakePHPで見つかりませんでした
そしてそれはそれでした!他の問題があるかもしれません-それらの神の速度-しかし私はそれらに遭遇しなかったので、私はこれ以上あなたを助けることができません。