![](/img/trans.png)
[英]Loading custom php file in Laravel without composer dump-autoload
[英]Laravel, dump-autoload without Shell Access
我有兩個同名的控制器:
app\\controllers\\CareersController.php
(供公眾使用) app\\controllers\\Admin\\CareersController.php
(供管理員使用)
由於命名沖突,我添加了namespace admin;
到管理控制器。
本地一切正常,但是當我將新的管理控制器上傳到我的服務器時,出現錯誤: Class Admin\\CareersController does not exist
據我了解,修復方法是: php artisan dump-autoload
和composer dump-autoload
但是,我沒有運行這些命令的 Shell 訪問權限,並且無論如何都沒有在服務器上安裝 Composer。 那么,有沒有辦法在沒有 Shell 訪問的情況下重新加載自動加載文件?
在本地運行composer dump-autoload
。 然后,在您的托管站點中,您可以在vendor/composer
文件夾中手動更新兩個文件autoload_classmap.php
和autoload_static.php
。 我更喜歡將添加的類從本地復制並粘貼到托管服務器。
您不需要外殼訪問。 Artisan 包括dump-autoload
功能。 您可以通過應用程序中的 PHP 調用來實現:
Route::get('/updateapp', function()
{
\Artisan::call('dump-autoload');
echo 'dump-autoload complete';
});
編輯:剛剛注意到您寫道“無論如何都沒有在服務器上安裝作曲家” 。 不確定會發生什么 - 嘗試上面的命令並告訴我們。
如果它不起作用 - 那么只需在本地運行 composer dump-autoload - 然后上傳您的新 autoload.php。
作為一個側面 - 是否有任何切換服務器的選項? 如果您沒有命令行和作曲家訪問權限,您將繼續遇到各種問題。 您可以使用 Forge 並在比解決此問題所需的時間更短的時間內在 DigitalOcean、Linode 等上啟動新服務器:)
我根據客戶的要求使用了共享主機,但沒有訪問 ssh 或 composer 的權限,我所做的是在本地機器上進行composer dump-autoload
然后我認為對於我的項目自動加載器只是更新我的vendor
目錄中的composer
目錄,所以我只是在每次dump-autoload
后重新上傳該文件夾,而不是所有供應商目錄
編輯:
另一個陷阱對我來說產生了同樣的錯誤,但原因是別的,我在 Windows 機器上開發,其中文件和目錄名稱在部署到 Linux 服務器時不區分大小寫,框架實際上找不到我的控制器,所以我改變了
Route::get('/news', 'newsController@index');
到
Route::get('/news', 'NewsController@index');
現在它正在工作,自動加載正在正確地完成它的工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.