【问题标题】:Laravel cannot use custom App PHP files in controllersLaravel 无法在控制器中使用自定义 App PHP 文件
【发布时间】:2018-03-24 13:50:43
【问题描述】:

在我的控制器中,我尝试使用位于 App 目录中的 PHP 文件。

我的控制器看起来像

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use App\MyClass\API;
    public function getservices(Request $request)
    {
        $sourcename = request('sName');
        $password = request('password');
        $siteID = request('siteID');

       // initialize default credentials
        $creds = new SourceCredentials($sourcename, $password, 
        array($siteID));

SourceCredentials 类在 API.PHP 文件中,位于 App\MyClass\API,这是 API.PHP

namespace App\MyClass;

class SourceCredentials
{
    public $SourceName;
    public $Password;
    public $SiteIDs;
    //some other stuffs

当我使用路由向控制器发出 POST 请求时,我收到此错误 -

找不到类“App\Http\Controllers\SourceCredentials”

我在这里犯了一些错误吗?我已经为 API.PHP 正确命名了命名空间,并且在我的控制器中使用了该命名空间。请帮忙。

【问题讨论】:

  • 注意: SourceCredentials 是一个类,而不是一个函数。
  • 是的,但是我的API.PHP文件有不止一个类,SourceCredentials就是其中之一
  • 拆分该文件并将每个类保存在其自己的文件中,并与该类同名(包括相同的大小写)。然后确保你的文件中有正确的命名空间,你将能够使用 Laravel 自动加载器加载你想要的类。
  • 谢谢。我这样做了,它有效,但我还有另一个问题。我无法使用与该类相关的功能。我已经在扩展控制器类,我无法扩展另一个类来使用该功能
  • 我不明白你的意思。如果您有新的(不同的)问题,请创建一个包含所有信息和示例的新问题。

标签: php laravel laravel-5 autoload


【解决方案1】:

你的用途是:

use App\MyClass\API;

而你的班级名称是:

SourceCredentials

像这样更正你的使用:

use App\MyClass\SourceCredentials;
// or if you want to youse the API name
use App\MyClass\SourceCredentials as API;

【讨论】:

  • 谢谢。但我的 API.php 文件有多个类,如 UserCredentials、API Service 等。使用所有类的最佳方式是什么?
  • 你关注的是哪个psr?而且我认为在一个文件中有很多类不是一个好主意!请记住单一职责是一个很好的原则,可以为您节省大量时间!
  • @tereško 你应该听从 teeyo 的建议,你的代码可能会受益于一个很好的传统方法,因为你选择使用非常固执己见的 Laravel,它的主要好处是它专注于文件的约定和类名而不是显式配置。
【解决方案2】:

您忘记了 App\MyClass\SourceCredentials 的使用;

use App\MyClass\SourceCredentials;

您的控制器应如下所示:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\MyClass\API;
use App\MyClass\SourceCredentials;
public function getservices(Request $request)
{
    $sourcename = request('sName');
    $password = request('password');
    $siteID = request('siteID');

   // initialize default credentials
    $creds = new SourceCredentials($sourcename, $password, 
    array($siteID));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    相关资源
    最近更新 更多