我定义了一个测试用户创建的测试.控制器设置为在出错时重定向回同一页面(通过生成验证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)
请注意返回的重定向与调用的方式不同 …