簡體   English   中英

Laravel,沒有外殼訪問的轉儲自動加載

[英]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-autoloadcomposer dump-autoload

但是,我沒有運行這些命令的 Shell 訪問權限,並且無論如何都沒有在服務器上安裝 Composer。 那么,有沒有辦法在沒有 Shell 訪問的情況下重新加載自動加載文件?

在本地運行composer dump-autoload 然后,在您的托管站點中,您可以在vendor/composer文件夾中手動更新兩個文件autoload_classmap.phpautoload_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM