我对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();
}
}
我收到错误,找不到该课程。希望有人可以帮助我,因为我不知道出了什么问题。
答案 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"
]
},