Laravel 5无法达到自定义类功能

时间:2015-09-22 13:09:11

标签: php laravel namespaces laravel-5

我对Laravel 5有疑问。我在app目录中创建了一个新的目录和文件。

App
    Helpers
        weather.php
    Http
        Controllers
            test.php

我想访问weather.php中的函数,但它不起作用。

Weather.php

namespace App\Helpers

class Weather {

    public function test() {
        return "A";
    }
}

test.php的

namespace App\Http\Controllers;

class TestController extends Controller {

    public function bla() {
        return \App\Helpers\Weather\test();
    }
}

我收到错误,找不到该课程。希望有人可以帮助我,因为我不知道出了什么问题。

4 个答案:

答案 0 :(得分:2)

问题是此行不正确:

return \App\Helpers\Weather\test();

如果要调用test方法,首先应创建对象Weather的实例:

namespace App\Http\Controllers;

class TestController extends Controller {

    public function bla()
    {
        $w = new \App\Helpers\Weather();

        return $w->test();
    }
}

相反,如果要直接在类上调用方法,则应将此方法设为静态:

class Weather {

    public static function test() {
        return "A";
    }
}

并以这种方式称呼它:

public function bla()
{
    return \App\Helpers\Weather::test();
}

答案 1 :(得分:1)

在Laravel 5.0和5.1中,您不再需要运行composer dump-autoload,因为新的PSR-4可以解决这个问题。

我认为这是正确的方法:

在Weather.php中 - 注意:文件名应为Weather.php

<?php namespace App\Helpers

class Weather {
   public function test() {
      return "A";
   }
}

在TestController.php中

 <?php namespace App\Http\Controllers;

 use App\Helpers\Weather;

 class TestController extends Controller {

    public function __construct(Weather $weather){
        $this->weather = $weather;
    }

    public function bla() {
        return $this->weather->test();
    }
 }

答案 2 :(得分:0)

我注意到weather.php有一个小写的w,应该是大写的。也许这就是问题?

答案 3 :(得分:0)

您的帮助程序类应添加到autoload部分composer.json。像,

autoload": {
    "files": [
        "app/Http/Helpers/weather.php"
    ]
},