【发布时间】:2017-03-20 19:19:22
【问题描述】:
注意:在此问题的底部进行编辑
我遇到了一个非常奇怪的问题,我开始在这个问题上拔头发。我正在使用 Angular 和 Laravel 5.4。
我正在使用Barryvdh\Cors,它运行良好。但是由于某种原因,我只收到了一个控制器的以下错误,没有别的!
跨域请求被阻止:同源策略不允许读取 远程资源在 http://www.example.com/packing?data_type=prealert&shipment_ref=1。 (原因:CORS 标头中缺少令牌“访问控制允许标头” 来自 CORS 预检通道的“Access-Control-Allow-Headers”)。
这只发生在packing。
这是我的路线(为了便于阅读,我省略了许多其他行):
Auth::routes();
Route::get('/', 'HomeController@index');
Route::group([ 'middleware' => 'cors'], function()
{
// works
Route::resource('prealert', 'PrealertController');
// doesnt work
Route::resource('packing', 'PackingController');
// works
Route::resource('shipping', 'ShippingController');
});
我正在比较下面的两个控制器,您可以看到它们完全相同(我认为??)。
如果我改变了
Route::resource('packing', 'PackingController');
到
Route::resource('packing', 'PrealertController');
效果很好。
我假设它在 AngularJS 方面没有任何意义,因为我已经能够将其范围缩小到简单的那一行,即即使代码相同,当我简单地使用另一个控制器时它也可以工作。
这是我的PackingController (Http/Controllers/PackingController.php)
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\PublishPackingRequest;
use Mockery\CountValidator\Exception;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use DB;
use Auth;
class PackingController extends Controller {
public function index( ) {
die('test');
}
}
还有我的PrealertController (Http/Controllers/PrealertController.php)
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\PublishPrealertRequest;
use Mockery\CountValidator\Exception;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Auth;
use DB;
class PrealertController extends Controller {
public function index() {
die('test');
}
}
编辑:
所以它变得更奇怪了,我将我的 PackingController.php 复制到一个名为 AnotherController.php 的文件中,并将我的路由行更改为以下...
Route::resource('packing', 'AnotherController');
我也把类名改成了AnotherController
即使这样也行得通!也许我应该尝试删除文件
【问题讨论】:
-
我的猜测是控制器中发生了一些错误,从而导致错误响应并且错误响应没有正确使用CORS。
-
通过 die(),你没有返回正确的 http 响应吗?让它返回一些东西或回显 Laravel 的 Response 对象
-
我认为这不是问题,因为我收到了来自工作控制器的
test响应。此外,Angular 在发送GET请求之前先发送OPTIONS请求,对于任何不是PackingController的控制器,它会到达GET,但对于那个控制器则不然 -
如果去掉 PublishPackingRequest use 语句(假设没有使用该类的代码),是否还会出现同样的错误?
-
不,但奇怪的是,当我按照上面的编辑复制控制器时,我确实必须创建一个新的请求文件,因为我收到一个 Laravel 错误,它找不到 PublishPackingRequest 类。然而,当我重命名文件并将类名等重命名为 PublishPackingRequest (extra n) 时,新文件再次起作用。
Packing的工作存在一些问题。我想看看我是否复制了一些东西,但还没有运气
标签: php angularjs laravel laravel-5