Laravel,没有Shell Access的dump-autoload

问题描述 投票:6回答:2

我有两个同名的控制器:

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访问的情况下重新加载自动加载文件?

php shell laravel laravel-4 composer-php
2个回答
4
投票

你不需要shell访问。工匠包括dump-autoload功能。您可以通过应用程序中的PHP调用来实现:

Route::get('/updateapp', function()
{
    \Artisan::call('dump-autoload');
    echo 'dump-autoload complete';
});

编辑:刚刚注意到你写道“无论如何都没有在服务器上安装作曲家”。不确定会发生什么 - 尝试上面的命令并告诉我们。

如果它不起作用 - 那么只需在本地运行composer dump-autoload - 然后上传新的autoload.php。

作为一个侧面点 - 有没有选择切换服务器?如果您没有命令行和作曲家访问权限,您将继续遇到各种问题。您可以使用Forge并在DigitalOcean,Linode等上启动新服务器,花费的时间少于解决此问题所需的时间:)


0
投票

我根据客户的要求使用共享托管,并且无法访问ssh或composer,我在本地计算机上执行了composer dump-autoload然后我认为我的项目自动加载器只更新了composer目录中的vendor目录,所以我只是在每个dump-autoload之后重新上传那个文件夹而不是所有供应商目录

编辑:

我生成相​​同错误的另一个陷阱但原因是别的,我在Windows机器上开发,在部署到Linux服务器时,文件和目录名称不区分大小写,框架实际上找不到我的控制器所以我改变了

Route::get('/news', 'newsController@index');

Route::get('/news', 'NewsController@index');

现在它正在工作,autoload正在正确地完成它的工作

© www.soinside.com 2019 - 2024. All rights reserved.