2012-04-05 16 views
6

अद्यतन से अपग्रेड करें: मैंने जो प्रश्न पूछा है, वह इस कवर को करने में कितना गहराई से शामिल नहीं है! आप इस पर ठोकर, तो मैं आशा जवाब मैं धक्का दिया आप के लिए उपयोगी हैकेकफ़्प 1.3 से 2.1

तो, "मंच" प्लगइन काम कर पाने के प्रयास में, मैं 1.3 से करने के लिए CakePHP उन्नत करने के लिए तय कर लिया है 2.1

(यह था मंच प्लगइन कुछ CakeDC utils कहा जाता है का उपयोग करता है, और वे पहले से ही CakePHP 2.0, और आश्चर्य आश्चर्य कर रहे हैं क्योंकि, मंच के 2.3 संस्करण है जो यह ... के साथ)

ठीक काम करता है utils स्पष्ट नहीं है, इसलिए मैंने केक अपग्रेडर जादू चीज को यहां दिए गए निर्देशों के अनुसार चलाया है:

http://book.cakephp.org/2.0/en/console-and-shells/upgrade-shell.html#upgrade-shell

और मुझे Upgrader भाग गया, और यह चीजों की एक गुच्छा किया कहा, और जैसे कि यह चीजों की एक गुच्छा क्या किया यह लग रहा है।

अब जब मैं अपनी साइट पर जाता हूं, तो यह नीचे होता है - बिल्कुल कोई प्रतिक्रिया नहीं।

अपाचे में त्रुटि लॉग पढ़ें:

[Thu Apr 05 02:58:04 2012] [error] [client 173.45.125.112] PHP Fatal error: Can't find application core file. Please create /cake_install/app/config/core.php, and make sure it is readable by PHP. in /cake_install/cake/libs/configure.php on line 393

कारण यह है कि फ़ाइल मौजूद नहीं है है कि यह एक राजधानी 'सी' उन्नयन में कॉन्फ़िग में बदल गया था। मैं क्या खो रहा हूँ?

+2

साइड नोट: भविष्य में इन समस्याओं को स्थानीय स्तर पर संस्करण नियंत्रण और परीक्षण के साथ से बचें। केवल एक सलाह। – jeremyharris

उत्तर

18

मैन्श द्वारा दिए गए उत्तर की मुझे काफी आवश्यकता नहीं है - मैंने 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 अपग्रेड इस शर्मीली अभ्यास से दूर है, इसलिए अब मुझे किसी भी सेट से पहले एक चेक की आवश्यकता है: प्रश्न में सॉर्ट खाली या शून्य है, इससे बचने के लिए कॉल को सॉर्ट करें। ठीक। काफी आसान है, लेकिन ... गीज़।

  • मैं सिर्फ एक

    अगर में फेंक दिया (! खाली ($ theArray)) { सेट :: प्रकार ($ theArray, ...); }

और यह तय किया गया कि।

अब मैं त्रुटियों 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

और वह था! अन्य मुद्दे हो सकते हैं - उन पर भगवान की गति - लेकिन मैं उन पर नहीं आया, इसलिए मैं आपकी मदद नहीं कर सकता।

+0

नहीं होगा, वहां हमेशा खोजने के लिए केवल दो तर्क हैं() अब: '$ this-> उपयोगकर्ता-> ढूंढें ('पहला', सरणी (...));' – mark

+0

ओह! उस टिप के लिए धन्यवाद! ठीक है, मुझे कोड दोबारा दोबारा दो। फिर। – bharal

+0

क्या यह सबसे लंबे समय तक एसओ उत्तर के लिए पुरस्कार प्राप्त करता है? – icc97

3

आपके पास शायद app/webroot/index.php में एक कस्टम केक पथ सेट था। केक 2.0 के लिए निर्देशिका संरचना थोड़ा बदल गई है और आम तौर पर इसे नए कोड द्वारा संभाला जाएगा जो स्वचालित रूप से CAKE_CORE_INCLUDE_PATH के लिए सही मान पाता है। साथ ही, सुनिश्चित करें कि APP_DIR उसी index.php फ़ाइल में ठीक से सेट है।

सुनिश्चित करें कि app/webroot/index.php में केक के लिए सही पथ है, जो /path/to/cake/lib है।

if (!defined('CAKE_CORE_INCLUDE_PATH')) { 
    define('CAKE_CORE_INCLUDE_PATH', DS.'path'.DS.'to'.DS.'cake'.DS.'lib'); 
} 

मानक define('CAKE_CORE_INCLUDE_PATH', ROOT) वापस करने के लिए वापस लाया जा रहा रूप में अच्छी तरह काम कर सकते हैं, अगर जिस तरह से केक की स्थापना की है भी कस्टम नहीं है।

+0

मैं हमेशा रूट का उपयोग करना पसंद करता हूं क्योंकि यह सामान्य है और आमतौर पर मेरे "उत्तर" में अधिकतर सभी डिफ़ॉल्ट परिदृश्य – mark

+0

में अधिक टिप्पणियों में काम करता है जो कि "मैं क्या कोशिश कर रहा हूं" की एक श्रृंखला है - किसी भी विचार – bharal

2

यहाँ 1.3 से 2.x की ओर पलायन पर अपने ब्लॉग पोस्ट है: भविष्य में संदर्भ के लिए http://www.forceflow.be/2011/11/12/migrating-from-cakephp-1-3-to-2-0/

, मैं यहाँ उस पोस्ट की सामग्री को शामिल किया है। का आनंद लें!

प्रारंभ करना

वहाँ अद्यतन करने के लिए कई तरीके हैं, लेकिन मध्यम परियोजनाओं के लिए छोटे के लिए, मैंने पाया यह सबसे अच्छा सिर्फ नए CakePHP 2 संरचना अनज़िप करने के लिए, और मैन्युअल रूप से अपने नियंत्रकों और उनके नए के लिए दृश्य पर कॉपी फ़ोल्डरों। आपको याद है कि फ़ोल्डर संरचना में काफी बदलाव आया है। उदाहरण के लिए, नियंत्रक मानचित्र अब नियंत्रक है। ध्यान दें कि आप फाइलों की प्रतिलिपि बनाते हैं - फाइलनामों के बारे में चिंता न करें, हम बाद में उस पर आ जाएंगे।

सुनिश्चित करें कि आप core.php और डेटाबेस.php (अब आपके (केकेएचपी रूट)/ऐप/कॉन्फ़िगर में स्थित हैं) अपने आवेदन के मानों के साथ। अपने पुराने इंस्टॉलेशन से भी नमक और सिफरहेड मानों पर प्रतिलिपि बनाना सुनिश्चित करें, क्योंकि जब आप डिफ़ॉल्ट का उपयोग करते हैं तो केकपीएचपी चमकते रहेंगे - यह एक सुरक्षा जोखिम है। इसके अलावा, डेटाबेस कनेक्शन ऊपर और फिर से चलाने के लिए, वाक्य विन्यास बदल गया था:

'driver' => 'mysqli' 

हो जाता है
'datasource' => 'Database/Mysql' 

थोक काम: कंसोल के माध्यम से अपग्रेड

आदेश का नाम बदलने के लिए आपके सभी नई केकपीएचपी फ़ाइल संरचना में ऐप फाइलें, एक कंसोल कमांड है। केकेपीएचपी 2.0 के लिए नया यह है कि प्रत्येक एप्लिकेशन में अब अपना कंसोल है। अपने ऐप के कंसोल पर नेविगेट करें (कंसोल नहीं/lib/केक में!)/ऐप्स/कंसोल में, सुनिश्चित करें कि कंसोल कमांड + x उस पर एक chmod करने से निष्पादन योग्य है, और निष्पादित करें:

./cake upgrade all 

इस नए केक मानक करने के लिए सभी फ़ाइलों का नाम होगा, और भीतर सभी संदर्भों को अद्यतन अपने PHP कोड

सफाई ऊपर

दुर्भाग्य से, यह अंत नहीं है। संभावनाएं पतली हैं कि आपका कोड अभी ठीक हो जाएगा। अधिक जानकारी के लिए केकेपीएचपी 2.0 माइग्रेशन गाइड पर एक नज़र डालें। मैं उन मुद्दों को जोड़ दूंगा जिनसे मैंने सबसे अधिक निपटाया है:

अपने विचारों में, अब आपको $ ऑब्जेक्ट के माध्यम से हेल्पर कक्षाओं को संबोधित करना होगा। कोई और अधिक फोन, उदाहरण

$html->link( 

के लिए, यह

$this->Html->link( 
अब

, सर है।

इसके अलावा:

  • JavascriptHelper अब JsHelper कहा जाता है।
  • एथ घटक महत्वपूर्ण रूप से बदल गया है। लॉगिन() जब आप घटक का उपयोग करते हैं तो कार्रवाई स्वचालित रूप से नहीं जोड़ा जाता है, आपको इसे मैन्युअल रूप से निर्दिष्ट करना होगा। अधिक जानकारी के लिए नया ऑथ घटक दस्तावेज़ देखें।

AjaxHelper हटा दिया गया है, AJAX शैली खोजों के लिए आसान काम करता है, observefield तरह के साथ। मैंने अपने स्वयं के जोखिम पर उपयोग करने के लिए jQuery का उपयोग करके अपना खुद का निरीक्षण क्षेत्र पकाया है। मैं एक फॉर्म को क्रमबद्ध करता हूं, जिसमें इस मामले में एक क्वेरी इनपुट बॉक्स होता है जो मुझे आरक्षण के लिए लाइव-सर्च-एंड-अपडेट करने की अनुमति देता है।

$this->Js->get('#query')->event('keyup', $this->Js->request(
array('controller' => 'sales','action' => 'searchReservations', $event['Event']['id']), 
array(
'update' => '#view', 
'async' => true, 
'dataExpression' => true, 
'method' => 'post', 
'data' => $this->Js->serializeForm(array('isForm' => false, 'inline' => true))) 
+1

क्या आप उस भाग को उद्धृत कर सकते हैं जो वास्तव में इस प्रश्न से संबंधित है (वह त्रुटि जो वह प्राप्त कर रही है) आपके उत्तर में? –

+0

यह मेरे साथ ठीक है अगर वह यहां लिंक रखता है - यह Google पर नंबर 1 को "अपग्रेड केकफैप 1.3 से 2.0" के लिए खोजता है, इसलिए यह मेरे विशिष्ट का जवाब देने के बजाय यहां एक सामान्य "अपग्रेड" ब्लॉग से लिंक करना समझ में आता है प्रश्न (क्योंकि यह पता चला है, मेरा जवाब आगे बढ़ गया और सभी अपग्रेड सवालों के जवाब देने और जवाब देने लगे क्योंकि मैं उनके पास आया था) – bharal

+1

@भारल: इस प्रकार के उत्तर के साथ समस्या यह है कि अक्सर, लिंक किए गए संसाधन को स्थानांतरित किया जाता है/नीचे ले लिया, और फिर जवाब उस पर आने वाले किसी के लिए बेकार हो जाता है। यही कारण है कि कम से कम एक अंश या सारांश शामिल करने के लिए एसओ/एसई नीति है। –

1

मुझे केक शैल अपग्रेड टूल का उपयोग करने के बाद भी यही समस्या थी। जबकि हमारा वेब ऐप बड़ा है, हमने index.php फ़ाइल को कभी भी अनुकूलित नहीं किया है।

की जगह हमारे MyApp/ऐप्स/webroot/index.php नई डाउनलोड CakePHP CakePHP-2.3.4/ऐप्स/webroot/index.php साथ मेरे लिए यह समस्या हल हो जाती।

मुझे यकीन नहीं है कि CakePHP Upgrade Shell क्यों है या इसके निर्देश index.php फ़ाइल को बदलने के लिए निर्दिष्ट नहीं हैं, लेकिन @ भरल के लंबे और महान उत्तर शो के रूप में, अपग्रेड शैल नहीं होने के बाद से बहुत अधिक काम है सब कुछ मत करो।