मैन्श द्वारा दिए गए उत्तर की मुझे काफी आवश्यकता नहीं है - मैंने index.php फ़ाइल को कभी भी छुआ नहीं है - इसलिए मैं विस्तार से बताऊंगा कि मैं यहां क्या प्रयास कर रहा हूं।
मैं इस साइट का उपयोग गाइड के रूप में कर रहा हूं, लेकिन मेरी अपनी टिप्पणी के साथ भी! हालांकि https://github.com/dereuromark/upgrade जो मैं अगर ऊपर ट्यूटोरियल में विफल रहता है पर एक शॉट हो सकता है मैं इस पर भी उत्सुक नहीं हूँ, मैं सुपर संपूर्ण दस्तावेज की तरह है, नहीं
Put `CakePlugin::loadAll();` in your app bootstrap to make sure this plugin is loaded
:।
http://www.paulmarshall.us/blog/migrating-from-cakephp-13-to-cakephp-20
(मैं भी इस पाया
जो मेरे लिए व्यर्थ है ... क्या आप फ़ाइल के फ़ोल्डर को निर्दिष्ट कर सकते हैं? लाइन जोड़ने के लिए फ़ाइल में कोई विशेष स्थान? आदि ... मैं कोशिश करता हूं और मैंने जो किया उसके बारे में विशेष रहें!)
सबसे पहले, मैंने देखा है कि index.php जो मेरा केक उपयोग कर रहा था वह index.php नहीं था जो केक 2.1 कोड के साथ आया था। यह सुनिश्चित करें कि ऐसा क्यों है, लेकिन मैंने "नया" 2.1 index.php प्रतिलिपि बनाई है (हाँ, यह ऐप/वेबूट/इंडेक्स है।
Notice: Undefined index: Error in /cake_install/lib/Cake/Core/Configure.php on line 94 Notice: Undefined index: Exception in /cake_install/lib/Cake/Core/Configure.php on line 95 Fatal error: Class name must be a valid object or a string in /cake_install/lib/Cake/Error/ErrorHandler.php on line 126
(जहां cake_install फ़ोल्डर जहाँ मेरे केक एप्लिकेशन बैठता है)
यह अब पर कार्य करना है ...
और अब मैं देखता हूँ कि: php फ़ाइल) और अब मैं एक नई त्रुटि है अपग्रेड टूल ने core.php फ़ाइल को अपग्रेड नहीं किया - ऐप/कॉन्फ़िगर में पाया गया (2.1 के लिए, ऐप/1.3 के लिए कॉन्फ़िगरेशन) ... अपग्रेड टूल वास्तव में क्या करता था? मैंने 2.1 संस्करण को काट और पेस्ट किया है (यानी, 2.1 कोड की ज़िप फ़ाइल से, मैंने उस /app/Config/core.php को लिया और इसे मेरे/ऐप/कॉन्फ़िगर निर्देशिका में ले जाया), और सुनिश्चित किया कि नमक और सुरक्षा मूल्यों को बदल दिया गया। बस।
फिर भी प्रयास विफल। तो अब मैं database.php फ़ाइल को अपग्रेड किया है (यह भी एप्लिकेशन/कॉन्फ़िग, या एप्लिकेशन/config में) ~ मैं
'driver' => 'mysqli',
'datasource' => 'Database/Mysqli',
फ़ाइलों का विन्यास करने के लिए बदल बेतरतीब ढंग से मज़ा है!
आह, ठीक है, तो कोर और डेटाबेस के लिए उन्नयन त्रुटि संदेश ... यह अच्छी बात है बदल? अभी भी अनिश्चित है कि उनकी बहुत अधिक "अपग्रेड" स्क्रिप्ट क्या हुई ... यह सिर्फ फाइल नाम बदल गया? वास्तव में?
Warning (2): file_put_contents(/cake_install/app/tmp/logs/error.log): failed to open stream: Permission denied [CORE/Cake/Log/Engine/FileLog.php, line 69]
Notice (1024): Please change the value of 'Security.cipherSeed' in app/Config/core.php to a numeric (digits only) seed value specific to your application [CORE/Cake/Utility/Debugger.php, line 810]
Fatal error: Class 'AppHelper' not found in /cake_install/lib/Cake/View/Helper/HtmlHelper.php on line 31
ठीक है, तो मैं 777/cake_install/ऐप्स/tmp/लॉग/फ़ोल्डर (chmod 777 आर folderHere) और
... लगता है कि मैं सिफर बीज उन्नत बनाया कभी नहीं। ठीक है, एक नया नंबर बनाया! (सिफर बीज क्या करता है, आप पूछते हैं? उम, ठीक है, बिंग बहुत मदद नहीं थी - मैंने कोड पढ़ा। लगता है कि कुकीज़ से एन्क्रिप्टिंग/डिक्रिप्टिंग के लिए इस्तेमाल किया जा सकता है? ठीक है, मैं इसके साथ रह सकता हूं)
Bootstrap.php
मैं अपने संस्करण के लिए ज़िप फ़ाइल में बूटस्ट्रैप ले जाया गया (छोटे के लिए धन्यवाद, स्क्रिप्ट उन्नयन!)। अभी तक कोई भी परिवर्तन नहीं किया है, मुझे लगता है कि मैं हालांकि प्लगइन्स लोड करने के लिए की आवश्यकता होगी ... मैं यह सुनिश्चित करें कि अच्छी तरह से हालांकि प्रलेखित है कर रहा हूँ (हां!)
ताकि मुझे इस errror साथ छोड़ देता है:
Fatal error: Class 'AppHelper' not found in /cake_install/lib/Cake/View/Helper/HtmlHelper.php on line 31
और निश्चित रूप से, बहुत vaunted केक Upgrader एक और उन्नयन करने में नाकाम रही है। इस पृष्ठ को देखें: http://book.cakephp.org/2.0/en/appendices/2-1-migration-guide.html
ठीक है, तो अब मुझे फ़ाइलों को बनाना है - जैसा कि वे उस पृष्ठ में हैं। केवल चाल है कि, हाँ, यह एप्लिकेशन फ़ोल्डर में है था, और कोई, मेरे फ़ोल्डर एप्लिकेशन/देखें कि CakePHP बनाया एक "सहायक" सबफ़ोल्डर नहीं था ... इसलिए AppHelper.php के लिए मैं एक हेल्पर करना था subfolder के तहत/ऐप/देखें /।
...
हे! अब मुझे पृष्ठभूमि और लोगो मिलता है ... और ये:
Notice (8): Undefined variable: loggedIn [APP/pages/top_menu.html, line 3]
Notice (8): Undefined variable: html [APP/pages/top_menu.html, line 25]
Fatal error: Call to a member function link() on a non-object in /cake_install/app/pages/top_menu.html on line 25
ग्रेट। कुछ प्रकार के कूल न्यू केक 2 फीचर का मतलब है कि मैं $ html का उपयोग नहीं कर सकता? ऐसा लगता है ... वास्तव में उपयुक्त, वास्तव में।
यकीन नहीं होता। अब मुझे यह बदलने की जरूरत है कि यह $-> डेटा कैसे काम करता है ??? क्यूं कर?? क्यूं कर?? यह भीड़ क्यों काम नहीं कर सकती है कि एपीआई फिक्स्ड कॉन्ट्रैक्ट्स नहीं हैं, फ्लोटिंग विचार नहीं ... argh।यह ठीक है, मेरे पास अब तक का सबसे ज्यादा इस्तेमाल किया जाने वाला केक लाइन है ... गलत। मैं अब से स्कैला या डीजेंगो में विकास कर रहा हूं, जूनियर भाषाएं चूसती हैं।
यहां मैं चला गया: ढूंढें। -type f -exec sed -i/$ this-> डेटा/$ यह-> अनुरोध-> डेटा/जी '{} \;
मैं ऐसा करने के लिए/एप निर्देशिका में गया था। यह 2.1 ... यह बेहतर रूप से भयानक होगा ... इसे पाने के लिए हर किसी को काम करने की ज़रूरत है। क्या यह मानता है, जूनियर भाषाओं के साथ काम करने वाला एक सामान्य दिन?
आह शानदार, $ html समस्या उत्पन्न हुई है क्योंकि किसी को लोअरकेस पसंद नहीं आया? केवल आश्चर्य एक सकते हैं: -
खोज
find . -type f -exec sed -i 's/$html/$this->Html/g' {} \;
(अतः में एक और पोस्ट करने के लिए धन्यवाद) और स्वाभाविक रूप से $ सत्र के साथ एक ही समस्या: Undefined var when using Html Helper in CakePHP 2.0 और समाधान है। -टाइप f -exec sed -i/$ सत्र/$ यह-> सत्र/जी '{} \;
...
चीजें साथ आ रही हैं! अब मैं inscrutible त्रुटि है: के प्यार के लिए
Controller class PagesController could not be found.
ओह ... तो मैं PagesController यहां पाया बढ़ने की जरूरत है:
lib/केक/कंसोल/खाके/skel/नियंत्रक/PagesController। php
और इसे यहाँ
एप्लिकेशन डाल/नियंत्रक/
फिर, केक संस्थापक/Upgrader काम पर सो हो रहा है।
और अब मेरे पास है
सहायक वर्ग JavascriptHelper नहीं पाया जा सका।
यह बहुत बुरा नहीं है - आपको "जावास्क्रिप्टहेल्पर" के कोई संदर्भ नहीं मिलेगा, लेकिन आपको अपने "$ helpers" सरणी में "जावास्क्रिप्ट" के संदर्भ मिलेंगे। बैक एंड अंत हेल्पर शब्द अतिरिक्त obfuscation के लिए जोड़ता है। वैसे भी, मैंने किसी भी $ helpers arrays के लिए मेरी php फ़ाइलों के माध्यम से खोज की, और AppController (2.1) कक्षा में, एक पाया।
मुझे मददगार नहीं हैं और न ही समझने वालों को समझते हैं - जावास्क्रिप्ट वाले, वैसे भी - इसलिए मैंने कभी उनका उपयोग नहीं किया। मैंने किसी बिंदु पर अंधेरे से ट्यूटोरियल का पालन किया होगा और इसे जोड़ दिया होगा ... लेकिन मुझे इसकी आवश्यकता नहीं है, इसलिए यह बाहर जाता है!
और अब मुझे अपनी सभी सीटीपी फाइलों को साफ करने की ज़रूरत है, जहां मैंने यह सुनिश्चित करने के लिए "आवश्यकता" का उपयोग किया था कि सही HTML का उपयोग किया गया था। एक बार मैं इसके लिए ऊपर से खोज कमांड का उपयोग करूंगा (उन्हें "व्यू" और "विचार" फ़ोल्डर में इंगित करने के लिए) Sigh। ठीक है, नहीं, यह इतना आसान नहीं है, है ना? कहाँ से पहले मैं था:
की आवश्यकता होती है (एप्लिकेशन/देखें/पृष्ठ/man_front.html)
अब मैं की जरूरत है:
की आवश्यकता होती है (/cake_folder/app/View/Pages/man_front.html)
(जहां केक फ़ोल्डर है जहां मेरे सभी केक सामान हैं।अनिश्चित क्यों यह है, लेकिन एक साधारण पाते हैं यह तय:
find . -type f -exec sed -i 's/app\/View\/Pages/\/cake_folder\/app\/View\/Pages/g' {} \;
(\ "depower" होगा एक /)
ठीक है, तो यह सब किया है और स्वीकार्य स्तर के कुछ प्रकार के लिए अपनी साइट मिल गया हो रही है , आगे क्या? खैर, अब आप कुछ डीबी मुद्दों को पा सकते हैं:
Warning (2): mysqli::mysqli() expects parameter 1 to be string, array given [CORE/Cake/Model/ConnectionManager.php, line 101]
Fatal error: Call to undefined method mysqli::getSchemaName() in /cake_install/lib/Cake/Model/Model.php on line 3383
बेशक, कोई और mysqli समर्थन नहीं है। इसके बजाय mysql का उपयोग करने के लिए डेटाबेस.एफ़पी संपादित करें (यानी मैंने केवल "i" को समाप्त कर दिया है)
(केकेएफपी में पीप के साथ क्या गलत है ??? एपीआई का मतलब है "अगर यह मौजूदा कोड तोड़ देगा तो सब कुछ न बदलें , कभी नहीं। "नहीं" बदलें! ओबामाएएएए! "~ अगला अपग्रेड, मैं अपने सभी कोड को डीजेंगो या स्प्रिंग या स्कैला पर धक्का दूंगा। रद्दी बकवास।)
अगला मुद्दा" घटक "है जिसका मैं उपयोग कर रहा हूं -
Missing Plugin
Error: The application is trying to load a file from the Uploader plugin
Error: Make sure your plugin Uploader is in the app/Plugin directory and was loaded
<?php
CakePlugin::load('Uploader');
Loading all plugins: If you wish to load all plugins at once, use the following line in your app/Config/bootstrap.php file
0: मैं एक केक त्रुटि कहावत मिल
तो ... न केवल मेरे सभी कोड को फेंक दिया गया है, बल्कि सभी पुरानी प्लगइन्स भी हैं? अच्छा लगा।
समाधान एक ऐप/प्लगइन फ़ोल्डर बनाना है (हाँ, जादू अपग्रेडर ऐसा नहीं करता है) या फिर आपके पास मौजूद प्लगइन्स को देखें। अभी व! यह आपके घटकों से अलग है! मुझे नहीं पता कि अभी तक कैसे - एक संभावित उत्तर के लिए मेरा प्रश्न देखें: Difference between a "component" and a "plugin" in cakephp 2.1? - लेकिन अभी, हम केवल "प्लगइन" फ़ोल्डर और प्लगइन को सामान्य रूप से देख रहे हैं। ऐसा लगता है, केक 1.3 में, प्लगइन्स इस तरह सूचीबद्ध थे:
var $components = array('Uploader.Uploader',...);
जो एक बिंदु नोटेशन के साथ है। में इसके साथ जी सकता हूँ। मेरे मामले में, मैं अपलोडर प्लगइन का नवीनतम संस्करण (! कि, शुक्र, 2.x संगत होना करने के लिए उन्नत किया गया था) मिलता है और एप्लिकेशन/प्लगइन फ़ोल्डर में रख करने के लिए आवश्यक
तो मैं मिला:
app
Plugin
Uploader
Config
Locale
<the other files here too!>
ऐसा लगता है कि अभी काम कर रहा है, हुरे!
अगले त्रुटि थी:
Warning (2): Invalid argument supplied for foreach() [CORE/Cake/Utility/Set.php, line 1048]
Warning (2): array_multisort() [ http://php.net/function.array-multisort] : Argument #1 is expected to be an array or a sort flag [CORE/Cake/Utility/Set.php, line 1087]
Warning (2): array_unique() expects parameter 1 to be array, null given [CORE/Cake/Utility/Set.php, line 1089]
Warning (2): Invalid argument supplied for foreach() [CORE/Cake/Utility/Set.php, line 1091]
Warning (2): Cannot modify header information - headers already sent by (output started at /cake_install/lib/Cake/Utility/Debugger.php:761) [CORE/Cake/Network/CakeResponse.php, line 395]
आह, तो ठीक है। यह स्पष्ट है। मुझे खुशी है कि मुझे पता है कि मेरे कोड में त्रुटि क्या है। अच्छा त्रुटि संदेश!
अब मुझे लगता है कि मूर्खतापूर्ण, यह सोचने के लिए कि उपयोगिता सेट :: सॉर्ट करना जारी रहेगा यदि पहली सरणी खाली थी! वास्तव में, केकफ लोग लोग जा रहे हैं, दिग्गजों के कंधों पर नहीं, बल्कि उनके माथे पर।
ऐसा लगता है कि नया 2.1 अपग्रेड इस शर्मीली अभ्यास से दूर है, इसलिए अब मुझे किसी भी सेट से पहले एक चेक की आवश्यकता है: प्रश्न में सॉर्ट खाली या शून्य है, इससे बचने के लिए कॉल को सॉर्ट करें। ठीक। काफी आसान है, लेकिन ... गीज़।
और यह तय किया गया कि।
अब मैं त्रुटियों FormHelper हो रही है - यह $ प्रपत्र की तरह दिखता है दृश्य अब $ this-> फार्म हो जाता है, तो मैं इस को बदलने के लिए एक और त्वरित स्क्रिप्ट है:
find . -type f -exec sed -i 's/$form/$this->Form/g' {} \;
और अब अगले त्रुटि मैं मिलता है:
Fatal error: Unsupported operand types in /cake_install/lib/Cake/View/Helper/FormHelper.php on line 1804
और अब वे किया है किया गए में गड़बड़ FormHelper में विधि "का चयन करें" - तो इससे पहले, जहां मैं इस किया था:
echo $this->Form->select('treatment_id', $treatments, null, array('empty' => '-- select treatment to rate -- '));
मैं अब इस राशि: मेरे घटकों के
echo $this->Form->select('treatment_id',$treatments, array('empty' => '-- select treatment to rate -- '));
और अब एक - वास्तव में, You_tube_loader_component - टूट गया था। अब मैं उन्हें "..." खंड में बजाय छड़ी रहस्यमय साथ चारों ओर खिलवाड़ की -
class YouTubeLoaderComponent extends Component {
function __construct(ComponentCollection $collection, $settings = array()) {
parent::__construct($collection, $settings);
...
}
}
पहले मैं सिर्फ uname और पासवर्ड की valeus चूक था: मैं इसे संशोधित करने के लिए इतना है कि शीर्ष लेख पढ़ता जरूरत "सेटिंग्स" सरणी!
आगे है:
Warning (2): Illegal offset type [CORE/Cake/Model/Model.php, line 2689]
Warning (2): Illegal offset type [CORE/Cake/Model/Model.php, line 2665]
Soooo यह एक समस्या है कि केक 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")
)
);
एक और मुद्दा मैं था कि, जो भी कारण, जांच करने के लिए:
$this->set('loggedIn', $this->Auth->user('id'));
काम नहीं किया। जाहिर है (हालांकि मुझे यकीन है कि क्यों/क्यों), 2.x में केकेपीएचपी ऑथ सत्र में सभी उपयोगकर्ता के विवरण स्टोर नहीं करेगा। मुझे पता नहीं है जो विवरण यह सत्र में संग्रहीत करता है, या उन्हें संशोधित करने के लिए - उसमें देखकर! - लेकिन मेरा कोड "आईडी" मान को सहेज नहीं रहा था, इसलिए उपरोक्त चेक हमेशा लॉग इन मान को गलत पर सेट करता है।
में सुधार करने के लिए, मैं कॉल संशोधित पढ़ने के लिए:
$this->set('loggedIn', $this->Auth->loggedIn());
जो मेरे लिए ठीक काम किया।
अगली समस्या यह है कि thios-> auth-> उपयोगकर्ता ('आईडी') उपयोगकर्ता में लॉग इन करने के बाद मुझे मीठा कुछ भी नहीं लौटाएगा। सौभाग्य से मैं इस पोस्ट भर में आया था, कि बातें स्पष्ट कर दिया:
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
कि सिर्फ इतना neater और कम भ्रामक नहीं है? अच्छा काम, केकफ़्पी mavericks!
अगले त्रुटि
Authorization adapter "controller" was not found.
कौन सा थोड़ा अस्पष्ट है ...
आह है! यहां पहले से ही स्टैक ओवरफ़्लो पर उत्तर दिया गया है: Authorization adapter was not found in cakePHP
और वह था! अन्य मुद्दे हो सकते हैं - उन पर भगवान की गति - लेकिन मैं उन पर नहीं आया, इसलिए मैं आपकी मदद नहीं कर सकता।
साइड नोट: भविष्य में इन समस्याओं को स्थानीय स्तर पर संस्करण नियंत्रण और परीक्षण के साथ से बचें। केवल एक सलाह। – jeremyharris