【问题标题】:How import custom class in controller Laravel?如何在控制器 Laravel 中导入自定义类?
【发布时间】:2020-09-04 06:55:09
【问题描述】:

我在 Laravel 的根目录下创建了一个新目录 Library

我在里面放了类文件:

class My { // }

因此,在控制器 Laravel 中,我尝试访问此类:

App\Library\My

但是 Laravel 并没有确定这条路径。

这是我的代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use View;

use App\Library\My;

class HomeController extends Controller
{
 //
}

【问题讨论】:

  • 如果不运行composer dump-autoload,您是否使用了psr-4
  • 它没有帮助:composer dump-autoload

标签: laravel laravel-5.2


【解决方案1】:

如上所述,确保将其放置在 App 目录中并确保其具有正确的命名空间,例如

<?php
  $fOne = new \App\library\functions;
  $isOk = ($fOne->isOk());
?>

【讨论】:

    【解决方案2】:

    基于此处帖子的完整且实用的示例:

    1 - 文件夹和文件 - 在app/下创建一个文件夹,在本例中我们将创建一个名为Library的文件夹。

    我们还将在文件夹中创建一个带有您的类名称的文件,这里我们将创建一个名为My的类。

    所以我们会有app/Library/My.php

    2 - 类和方法 - 现在,为了测试,在类内部创建一个名为myMethod的静态方法

    <?php
    
    namespace App\Library;
    
    class My
    {
        public static function myMethod() 
        {
            return 'it\'s work!';
        }
    }
    

    3 - Controller - 现在在Controller的开头,我们将使用use声明你的类的命名空间:

    <?php
    
    namespace App\Http\Controllers;
    use App\Library\My;
    
    //rest of the controller code
    

    最后,要创建My 类的实例,在Controller 中必须使用new 语句:

    //rest of the controller code
    
    public function index()
    { 
        $whatever = new My;
        return $whatever::myMethod();
    }
    

    【讨论】:

    • 我喜欢你的回答如此详尽。
    【解决方案3】:

    您应该在app 文件夹中创建Library 文件夹

    namespace App\Library\My

    app 文件夹已被使用 psr-4

    在你的控制器中

    use App\Library\My as My

    这对我有用。希望这个回答对你有帮助

    【讨论】:

    • 如果我什么时候想使用一些命名空间?
    • 如果您想使用另一个没有应用程序的命名空间,例如 Library\My,请查看文件 composer.json autoload > psr-4。插入新的自定义自动加载并在 terminal 中运行 composer dump-autoload
    • 当我将鼠标悬停在这个`use App\Library\My;`上时,我收到消息:未定义的命名空间
    【解决方案4】:

    您必须为每个类正确命名。

    所以你可以使用 use 关键字导入你的类,就像这样

    use App\Library\My;
    
    ....
    
    $my = new My();
    

    或者如果你有冲突的类名,那么你可以在导入时使用as 关键字来为类名起别名

    use App\Library\My as MySecond;
    
    ....
    
    $my = new MySecond();
    

    如果你想在方法中直接访问你的类,那么你可以像这样访问它。

    $my = new \App\Library\My();
    

    注意:前导\表示App是在全局范围内声明的。

    【讨论】:

    • use App\Library\My; - 未定义的命名空间
    • @Dev 告诉我你的课程的代码以及你试图在哪里访问课程?
    • 我应该使用provider吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2017-07-07
    • 2018-07-22
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多