当没有设置 HTTP_REFERER 时,redirect()->back() 出现问题。
通常,当我使用 ID 作为参数打开我的 URL 以显示特定数据行时:
http://my-domain/module/ID
如果指定的ID不存在或者当前登录的用户没有权限打开,则进行
if (!$this->checkPermission($id)) {
return redirect()->back()->withError('message');
}
// do my stuff to show the datarow
但是当我更改浏览器地址字段并加载一个不允许的 ID 时,就没有设置 HTTP_REFERER 和 redirect()->back() 将我重定向到我在 View 中添加的最后加载的 JavaScript for_this_view.js(并显示它),如下所示:
app.blade.php
<!DOCTYPE html>
<html lang="de">
<head>
@section('head')
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
{!! HTML::style('assets/jquery-ui/jquery-ui.min.css?ver=1.11.4') !!}
<!-- some more scripts -->
@show
</head>
<body>
@yield('content')
</body>
</html>
show.blade.php
@extends('app')
@section('head')
@parent
{!! HTML::script('for_this_view.js') !!}
@stop
@section('content')
<!-- display datarow -->
@stop
redirect()->back() 在这里做什么?
如果没有重定向回 laravel 的 URL 是在猜测一个吗?为什么?也许永远有办法重定向。
这让我无法使用这个功能。
更新
啊,也许我发现了我的问题......
如果 JavaScript 存在于特定文件夹中,我会尝试动态加载它们。
我这样做是因为我希望我的 JavaScript 像 View 一样被解析,以便在其中获取 Blade 语法。我在 /config/view.php 中添加了一个特定的文件夹,并制作了类似 for_this_view_js.blade.php 的文件。它们作为 for_this_view.js 动态添加到 routes.php 中。
因此我做了类似的东西:
/* load view javascripts */
/** @var \SplFileInfo $path */
foreach (new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(public_path())
) as $path)
{
if ($path->isFile()
&& ends_with($path->getFilename(), 'js.blade.php'))
{
Route::get('url_to_javascript.js', function() {
$contents = View::make('for_this_view_js(.blade.php)');
$response = Response::make($contents);
$response->header('Content-Type', 'application/javascript');
return $response;
});
}
}
最佳答案
如果没有HTTP_REFERER已设置,Laravel 尝试从 session 中获取最后一个请求。此 URL 存储在 Illuminate\Session\Middleware\StartSession 中:
protected function storeCurrentUrl(Request $request, $session)
{
if ($request->method() === 'GET' && $request->route() && ! $request->ajax())
{
$session->setPreviousUrl($request->fullUrl());
}
}
如您所见,不幸的是您的 JS 请求满足了一些条件:
在我看来,您有两个选择。
警告:我还没有测试过这个,可能会有副作用
转到 app/Http/Kernel.php并删除 'Illuminate\Session\Middleware\StartSession',来自 $middleware .现在如果没有 HTTP_REFERER设置后,Laravel 将简单地重定向到你的应用程序的根目录(/)
您可以扩展中间件并添加一些额外的检查:
class CustomStartSession extends \Illuminate\Session\Middleware\StartSession {
public function storeCurrentUrl(Request $request, $session){
if(!ends_with($request->url(), '.js')){
parent::storeCurrentUrl($request, $session);
}
}
}
然后通过替换原来的StartSession来启用它在 app/Http/Kernel.php与您的请求以及任何以 .js 结尾的 URL 的请求不会被保存为“以前的网址”
显然,中间件需要注册为单例才能发挥全部功能。您可以通过在 register 中添加它来做到这一点您的服务提供商之一的方法(例如 AppServiceProvider )
$this->app->singleton('App\Http\Middleware\CustomStartSession');
关于php - Laravel 5 redirect()->back() 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29367404/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我已经看到了一些其他的问题,尝试了他们的建议,但没有一个对我有用。我已经使用Rails大约一年了,刚刚开始一个新的Rails项目,突然遇到了问题。我卸载并尝试重新安装所有Ruby和Rails。Ruby很好,但Rails不行。当我输入railss时,我得到了can'tfindgemrailties。我当前的Ruby版本是ruby2.2.2p95(2015-04-13修订版50295)[x86_64-darwin15],尽管我一直在尝试通过rbenv设置ruby2.3.0。如果我尝试rails-v查看我正在运行的版本,我会得到同样的错误。我使用的是MacOSXElCapitan版本10
考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://
我仍然收到标题中的“错误”消息,但不知道如何解决。在ApplicationController中,classApplicationController在routes.rb#match'set_activity_account/:id/:value'=>'users#account_activity',:as=>:set_activity_account--thisdoesn'tworkaswell..resources:usersdomemberdoget:action_a,:action_bendcollectiondoget'account_activity'endend和User
我正在处理http://prepwork.appacademy.io/mini-curriculum/array/中概述的数组问题我正在尝试创建函数my_transpose,它接受一个矩阵并返回其转置。我对写入二维数组感到很困惑!这是一个代码片段,突出了我的困惑。rows=[[0,1,2],[3,4,5],[6,7,8]]columns=Array.new(3,Array.new(3))putscolumns.to_s#Outputisa3x3arrayfilledwithnilcolumns[0][0]=0putscolumns.to_s#Outputis[[0,nil,nil],[
考虑这个,它工作正常::>.to_proc.curry(2)[9][8]#=>true,because9>8然而,即使>是一个二元运算符,如果没有指定的元数,上面的代码将无法工作::>.to_proc.curry[9][8]#=>ArgumentError:wrongnumberofarguments(0for1)为什么两者不等价?注意:我特别想用提供的一个参数创建中间柯里化(Currying)函数,然后然后调用然后用第二个参数调用它。 最佳答案 curry必须知道传入的过程的数量,对吧?:-1来自arity的负值令人困惑,但基本上
在Ruby(或Rails)中,我们可以做到new_params=params.merge({:order=>'asc'})现在new_params是一个带有添加键:order的散列。但是是否有一行可以返回带有已删除key的散列?线路new_params=params.delete(:order)不会工作,因为delete方法返回值,仅此而已。我们必须分3步完成吗?tmp_params=paramstmp_params.delete(:order)returntmp_params有没有更好的方法?因为我想做一个new_params=(params[:order].blank?||para