http://angulairapi.rohanchhabra.in/airports
这是我在Laravel创建的一条非常简单的路线。它只需要在公共目录中获取一个json文件,将其解码为一个数组并在响应中返回相同的json。
如果你去路线(如上所述),错误说"没有这样的文件或目录"但它确实存在。它在我的本地机器上工作正常。但是当我在服务器上推送同样的东西时,却给了我这个错误。
http://gitlab.learningtechasia.com:8901/rohan0793/angulairapi.git
我已将存储库设为公开,以便每个人都可以查看。
答案 0 :(得分:2)
我已经在我的机器上测试过资产()正在为我工作,你写的路径(public / airports.json)反映了同样的错误。
Laravel的Helper功能资产(“file_name”)生成资产的URL。
请查看laravel的helper功能文档以获取更多详细信息
将此代码放入routes.php并再试一次
<?php
Route::get('/airports', function(){
$airports = json_decode(file_get_contents(asset("airports.json")));
return Response::json($airports);
});
Route::get('/flights', function(){
$airports = json_decode(file_get_contents(asset("flights.json")));
return Response::json($airports);
});
修改强>
当你在本地机器上工作时,你的网址有公共字,即localhost / project-name / public / airports.json。
但是当你在服务器上部署项目时,它似乎从url中移除了公共单词,所以在这里讨厌的是,服务器在位置http://angulairapi.rohanchhabra.in/public/airports.json找到airports.json,但实际上它并不在位置http://angulairapi.rohanchhabra.in/airports.json,所以建议使用laravel函数(在本例中为asset())来生成url / assets链接。
答案 1 :(得分:0)
asset()
和Anands答案的替代方法是辅助函数public_path()
。它从系统的角度返回绝对文件路径,而不是URL。
$airports = json_decode(file_get_contents(public_path().DIRECTORY_SEPARATOR."airports.json")));
asset()
应该用于文件的URL。您发送给客户端的URL。您应该使用public_path()
来处理内部事务,例如获取文件的内容。