我有两个同名的控制器:
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访问的情况下重新加载自动加载文件?
你不需要shell访问。工匠包括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
然后我认为我的项目自动加载器只更新了composer
目录中的vendor
目录,所以我只是在每个dump-autoload
之后重新上传那个文件夹而不是所有供应商目录
编辑:
我生成相同错误的另一个陷阱但原因是别的,我在Windows机器上开发,在部署到Linux服务器时,文件和目录名称不区分大小写,框架实际上找不到我的控制器所以我改变了
Route::get('/news', 'newsController@index');
至
Route::get('/news', 'NewsController@index');
现在它正在工作,autoload正在正确地完成它的工作