问题标签 [laravel-middleware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4615 浏览

php - 在 Laravel 中使用 PHPUnit 测试 HTTP 动词时遇到问题

在开始之前,我想说我已经看过Failed asserting the HTTP status is 200 not 500以及Failed asserting the HTTP status code is 200 not 500。不要让名字欺骗你;他们是2个不同的职位。这两个帖子都超过 9 个月,没有好的答案。

我在测试路线时遇到了一些麻烦。所以,我Laravel 5在我的 Mac Mini 上创建了一个新项目,正在运行OS X Yosemite 10.10.2. 我正在制作一个 API。所以,我首先开始制作 API 的后端部分。我决定我想用它PHPUnit来为这个项目实现 TDD。我的版本PHPUnit4.0.20. 我正在运行PHP 5.5.14,并且正在使用命令行工具Laravel中打包的服务器。artisan

现在,我开始确保我可以连接到服务器。所以,我的第一个测试看起来像:

这通过就好了。但是,当我转到 POST 请求时,它失败了。这是我的第二个测试的样子:

此测试失败。这是输出的样子:

在我的 routes.php 文件中,我确实注册了这条路线:

在我的 MessagesController 中,我拥有所有必需的方法:

所以,目前,不管 HTTP 动词是什么,我都应该得到'response'. 现在,我决定用 curl 验证测试:

这将返回 Laravel '哎呀!页。所以确实存在某种服务器错误,但我不确定要寻找什么。应用程序流程看起来不错,但显然无法正常工作。这是我的 Laravel 日志中的堆栈跟踪:

我对 Laravel 很陌生,所以我不确定如何真正深入研究并使用堆栈跟踪来找出问题所在。我也尝试过没有Route::resource,但这并不能缓解我的情况。我的 GET 仍然可以正常工作 ( Route::get),但我的 POST ( Route::post) 仍然出现同样的 500 错误。.../compiled.php 中包含第 2375 行的函数(来自堆栈跟踪顶部抛出的异常)由 Laravel 生成,如下所示:

那时,我尝试编辑 POST 测试,因为我实际上并没有发送任何数据。所以这是我修改后的第二个测试:

我收到相同的错误消息。我觉得我错过了一些简单的东西,但我无法弄清楚。任何帮助将不胜感激。

0 投票
1 回答
2474 浏览

laravel-5 - Laravel 5:无法将数据从中间件传递到控制器

我正在向控制器发送带有 GET 方法的 ajax 请求

中间件:

在 HomeController 的 index() 方法中,我试图返回 $request 但页面抛出错误

我只是返回$requestHomeController

如何将请求变量传递给 HomeController@index 以便我可以继续处理?我厌倦了尝试各种方法...

0 投票
1 回答
28894 浏览

php - Laravel 中间件,除了 Route::group

我正在尝试为管理部分创建一个组路由,并将中间件应用于除登录和注销之外的所有路径。

到目前为止,我所拥有的是:

如何使用上述设置为中间件声明异常?

0 投票
5 回答
64248 浏览

laravel - Laravel 5 资源丰富的路由加中间件

是否可以将中间件添加到资源丰富的路线的全部或部分项目中?

例如...

此外,如果可能的话,我想将所有路由都放在中间件之外indexshow使用auth中间件。或者这是需要在控制器内完成的事情?

0 投票
2 回答
2242 浏览

laravel - Laravel 5 - 将中间件分配给控制器命名空间

在允许访问 Laravel 5 网站的管理面板之前,我需要对用户进行 ACL 检查。对命名空间中的整个控制器组执行此操作的最佳方法是什么App\Http\Controllers\Admin\*?最终,我正在寻找一种“一劳永逸”的方法来做到这一点,而中间件看起来是迄今为止最好的选择。

最初的想法是为管理路由分配一个中间件,但这并不妨碍任何其他非管理路由访问控制器。这意味着路由仍然可以针对管理控制器并绕过 ACL 检查。

下一个想法是在控制器的构造函数中插入赋值,但这需要每个额外的控制器显式包含中间件。这将要求开发人员知道应该包含中间件,这使他们完全错过了它。这也适用于使用一个基本控制器作为所有管理控制器的父级,因为开发人员需要知道应该扩展基本控制器。现在,这看起来是最好的解决方案。

这让我们回到了这个问题:中间件可以分配给控制器通配符命名空间App\Http\Controllers\Admin\*吗?或者,是否有更好的方法让 ACL 检查永远不需要明确分配给每个管理控制器?

0 投票
1 回答
2580 浏览

laravel - Laravel 中间件永远重定向

有人可以帮我解决中间件吗?我得到了一个无休止的重定向,这让我疯狂了一个星期。

好的,刚刚再次更新了代码,但仍然存在永远重定向任何想法的问题?

0 投票
1 回答
2470 浏览

php - 我可以使用 Laravel 5 中间件来允许包覆盖应用程序路由吗?

我希望能够用包中的路由覆盖 app/Http/routes.php 中定义的路由。

例如,在 app/Http/routes.php 我可能有这个:

我希望能够在 /vendor/author/package/src/Http/routes.php 中定义它:

app/Http/routes.php 文件首先加载,因此使用其中的路由,而不是包。

在 Laravel 4 中,我会使用 App::before 或 App::after 来执行此操作,并给予它们优先级。

就像在包路线中一样:

我不知道如何在 Laravel 5 中实现这一点。我找到了这个https://mattstauffer.co/blog/laravel-5.0-middleware-filter-style,但不知道如何用它来做我想要的.

编辑:Laravel 4 这样做的方式将允许为每个路由设置此优先级,所以我不只是在应用程序之前加载所有包路由。

0 投票
1 回答
3652 浏览

routing - In Laravel 5 how do I implement an App::before() filter?

In Laravel 4.2 I had this before filter that set the Eloquent model and table based on the URL (admin.example.com vs example.com)

Here is my filter code:

I tried creating middleware for this in laravel 5 and have this code:

In my routes.php file I am setting the controller that is called based on the auth.model setting like this:

What I found is that the routes are all read prior to the middleware so the change I am trying to make through Config::set() isn't happening. I am only getting the value that is set in the auth.php config file.

What am I doing wrong and how should I do this in Laravel 5?

0 投票
1 回答
202 浏览

laravel-5 - Laravel 5 中间件

嗨,我正在使用 Laravel 5 的中间件,我正在做的是我有几个控制器中使用的中间件,我的每个控制器都有自己的配置,我需要传递我的中间件,我该怎么做?

0 投票
3 回答
5209 浏览

laravel-5 - 暂时禁用/绕过中间件

在我的应用程序中,我结合了自定义身份验证包(Cartalyst 的 Sentinel )实现了 OAuth2-Server( oauth2-server-laravel)。

在我的 routes.php 中:

因此,请求必须提供授权标头,否则应用程序会以 OAuthException 退出。

现在我想对我的控制器进行单元测试。所以我必须为我的数据库添加一个 OAuth 会话和每次测试的访问令牌。然后用 Bearer Token 覆盖call()-methodTestCase并设置 HTTP-Authorization Header。

有没有办法禁用或绕过中间件(在我的情况下仅用于单元测试)?

在 Laravel 4 中,它们被称为路由过滤器,无论如何它们在测试环境中都被禁用了。您也可以使用 . 手动启用/禁用它们Route::enableFilters()