最近小弟在學習用Laravel在架電商
參考了許多平台還是選用綠界
但是在引用時遇到了一個神秘的問題
希望有大大可以幫忙解決
先附上環境:
PHP 7.1.3
Laravel 5.8
資料夾配置
我在app/Http/Controllers/
下建立了一個TestController
也有記得在route/web.php
內寫Route::post('/api/test/buy','TestController@buy');
而在TestController 內
底下有個測試用的buy function
如下圖
但是在我POST他之後他出了以下錯誤QQ
找了蠻多方法但都沒辦法解決
拜託各位路過的大大幫忙解惑謝謝!
試試這個方式
在composer.json中找到autoload這一段
"autoload": {
"classmap": [
"database/seeds",
"database/factories",
"app/ECPaySDK"
],
"psr-4": {
"App\\": "app/"
}
},
然後執行composer dump-autoload
原本的include那段刪掉,要用時前面多一個斜線,應該就可以用了$obj=new \ECPay_AllInOne();
報告大大,感謝您的回覆,剛剛試過了還是沒有辦法QQ
Ps.我有乖乖下composer dump-autoload ><
附上錯誤圖
我有嘗試過把$obj= new \ECPay_AllInOne();
改成$obj= new \ECPaySDK\ECPay_AllInOne();
但也無效,跑出的錯誤是
而我把報錯的$obj->Send['ChoosePayment']=ECPay_PaymentMethod::ALL ;
改成$obj->Send['ChoosePayment']=\ECPaySDK\ECPay_PaymentMethod::ALL ;
跑出的錯誤
以邏輯來說我覺得我後面自己這樣寫基本上就錯了
但還是病急亂投醫QQ
有幾個地方漏了
ECPay_PaymentMethod這個要先在最前面用use
下面是直接用ECpay提供的範例做的測試
ChoosePayment那邊記得要改
這是我測試的結果
補充,你的composer dump-autoload 跑完後
到vendor\composer\autoload_classmap
看看ECpay有沒有被寫入到裡面
像這樣
報告大大,你說的方法我有試過
在vendor裡面我也確定有寫入 但是還是報錯
想請問大大的laravel 版本是多少?我的是5.8
程式碼如下
結果QQ
謝謝大大百忙之中幫忙我這個小廢柴解惑QQ
感激不盡
下面關於 namespace 的範例可以參考一下
<?php
namespace MyTest;
class Test3
{
public static function create($className)
{
//這類似原本SDK 649~650行的寫法
//如果有 namespace 這邊就會出錯
return new $className();
}
public static function createNS($className)
{
//這種需要加上 namespace
$className='MyTest\\'.$className;
return new $className();
}
public static function createTest4()
{
//比較一下比較常見的寫法
//這邊不用加 namespace
return new Test4();
}
}
class Test4
{
public function __construct()
{
echo 'Test4';
}
}
Test3::createNS('Test4'); // Ok
Test3::createTest4(); // Ok
Test3::create('Test4'); // Error
剛試了一下5.8確實會有這個問題
最前面引用的部分
改成
use ECPay_PaymentMethod as ECPayMethod;
use ECPay_AllInOne as ECPay;
原本$obj= new \ECPayAllInOne();改成
$obj=new ECPay();
ECPayMethod這邊不動
嗚嗚我可以了大大!!
真的真的非常的感謝您!
透過這個更了解namespace 的概念
萬分感謝 如果有機會來台中可以找我 請你吃飯QQ
找了蠻多方法
要不
找找Class 'App\Http\Controllers\ECPay_AllInOne' not found
的原因先
你是不是沒有use ?
在Laravel應該是用use不是用include.
報告大大,我有用過use 但還是無法QQ...
EcPay的檔案是你寫的嗎?
怎麼寫的?
或是可以參考fillano大大給的那篇,
引用檔案的方式,
我是還沒試過這種方式,
Laravel我也是新手.
https://github.com/ECPay/ECPayAIO_PHP/tree/master/AioSDK
看起來他的SDK不符合psr-4 auto-loader標準啦,這部份要處理一下。首先要把不同的類別拆成跟類別名稱一樣的php檔。
把不同的類別拆成跟類別名稱一樣的php檔。
我目前都是這樣做的,
不過聽說有其他方式可以解決,
只是看起來比較麻煩,
因為時程上的關係沒時間研究,
直接照Laravel預設的方式最快.
感謝大大們提供的資訊 我真覺得自己像個蔡逼八,我會再看一下psr-4-autoloader標準的資訊的,現代php框架真的博大精深QQ
突然發現,似乎是兩個月前 ecpay 釋出 composer 版本了
https://github.com/ECPay/SDK_PHP.git