小编kur*_*749的帖子

在Laravel 5中,为什么在phpunit测试期间调用时,Request :: root()会有所不同?

我定义了一个测试用户创建的测试.控制器设置为在出错时重定向回同一页面(通过生成验证App\Http\Requests\Request).这在手动单击浏览器时可正常工作,但在测试期间失败.而不是重定向到:

http://localhost/account/create
Run Code Online (Sandbox Code Playgroud)

测试重定向到(缺少斜线):

http://localhostaccount/create
Run Code Online (Sandbox Code Playgroud)

这些网址都不是我在.htaccess或$urlconfig/app.php 中的变量中设置的.哪个是(在OSX Yosemite上):

http://~username/laravel_projects/projectname/public
Run Code Online (Sandbox Code Playgroud)

我最终指出这个问题与如何Request::root()产生结果有关.在测试之外调用此结果会导致在.htaccess和.htaccess中定义的期望值$url.在测试中,它导致:

http://localhost
Run Code Online (Sandbox Code Playgroud)

需要更改哪些配置才能使此函数在两个上下文中返回正确的值?

我还要提到我从Laravel 4到当前版本5.0.27的痛苦升级.

******更新*******

我能够找到一个可接受的解决方案/解决方案来解决这个问题!

在Laravel 5中,引入了FormRequests以帮助将验证逻辑移出控制器.一旦请求映射到控制器,如果指定了FormRequest(或只是Request),则在执行控制器操作之前执行此操作.

这种FormRequest默认处理响应如果验证失败.它会尝试根据您发布表单数据的路径构建重定向.在我的情况下,可能与我从Laravel 4更新到5的错误有关,这个默认重定向的构造不正确.用于处理响应的Laravel System代码如下所示:

 /**
 * Get the proper failed validation response for the request.
 *
 * @param  array  $errors
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function response(array $errors)
{
    if ($this->ajax() || $this->wantsJson())
    {
        return new JsonResponse($errors, 422);
    }
    return $this->redirector->to($this->getRedirectUrl())
                                    ->withInput($this->except($this->dontFlash))
                                    ->withErrors($errors, $this->errorBag);
}
Run Code Online (Sandbox Code Playgroud)

请注意返回的重定向与调用的方式不同 …

php url .htaccess phpunit laravel-5

11
推荐指数
1
解决办法
3512
查看次数

标签 统计

.htaccess ×1

laravel-5 ×1

php ×1

phpunit ×1

url ×1