Laravel 4:重定向:打算始终重定向到相同的不需要的路由

时间:2013-11-10 16:05:47

标签: php laravel-4 laravel-routing

由于某些原因我无法理解,当我在登录后使用Redirect::intended()方法时,我总是被发送到我的路由文件的fournisseurs/ax_getListProduits URL,无论我真正想要的URL是什么,有两个例外:

  • 如果我删除帖子fournisseurs/ax_getListProduits路线,一切正常
  • 如果我在登录页面显示之前添加echo Session::get('url.intended');调用,则会显示正确的目标URL,并且它可以正常工作(但如果我在Auth::attempt之后添加此代码,我会被发送到{ {1}})。

我无法理解发生了什么......我在这里或在Laravel Github存储库中找不到任何类似的问题,这让我觉得我做错了什么,但我找不到它......我发布了这个问题是Github上的一个可能的错误,但没有成功,这里:https://github.com/laravel/framework/issues/2668

以下是我的路线文件和我的登录控制器代码:

routes.php文件

fournisseurs/ax_getListProduits

登录控制器:

Route::group(array('before' => 'auth'), function() {
  Route::get('/', array("as"=>"home", function() {
    return Redirect::to("fournisseurs");
  }));
  Route::resource('usergroups', 'UsergroupsController');
  Route::get('fournisseurs/ax_produits', 'FournisseursController@ax_produits');
  Route::post('fournisseurs/ax_getProduit', 'FournisseursController@ax_getProduit');
  Route::post('fournisseurs/ax_updProduit', 'FournisseursController@ax_updProduit');
  Route::post('fournisseurs/ax_getListProduits', 'FournisseursController@ax_getListProduits');
  Route::resource('fournisseurs', 'FournisseursController');

  Route::resource('adresses', 'AdressesController', array('only' => array('store', 'destroy', 'edit', 'update')));
  Route::get('/adresses/create/{frs_id}', array('as'=>'adresses.create', 'uses'=>'AdressesController@create'));

  Route::resource('contacts', 'ContactsController', array('only' => array('store', 'destroy', 'edit', 'update')));
  Route::get('/contacts/create/{frs_id}', array('as'=>'contacts.create', 'uses'=>'ContactsController@create'));
});

Route::get('login', array('as' => 'login', 'uses' => 'SessionsController@create'));
Route::get('logout', array('as' => 'logout', 'uses' => 'SessionsController@destroy'));
Route::resource('sessions', 'SessionsController', array('only' => array('create', 'store', 'destroy')));

查看create.blade

class SessionsController extends BaseController {

public function create() {
    // if I uncomment the following line, everything is OK
    //  echo Session::get('url.intended');
    return View::make('sessions.create');
}

public function store() {
    $input = Input::all();

    $attempt = Auth::attempt(array(
        "nom" => $input["nom"],
        "password" => $input["password"]
    ));

    if($attempt) return Redirect::intended("/");

    return Redirect::back()->with("flash_error", "Nom ou mot de passe invalide")->withInput();
}

public function destroy() {
    Auth::logout();
    return Redirect::home();
}

}

default.blade布局

@extends("layouts.default")
@section("content")

<div class="login_form">

<div class="row"><div class="col-md-4 col-md-offset-4">
  <h2>Identification</h2>
</div></div>

<div class="row">
  <div class="col-md-4 col-md-offset-4">
    {{ Form::open(array('route' => 'sessions.store', 'class' => 'form', 'role' => 'form')) }}
      <div class="form-group">
        {{ Form::label('nom', 'Nom') }}
        {{ Form::text('nom', '', array('autocomplete'=>'off', 'class' => 'form-control')) }}
      </div>
      <div class="form-group">
        {{ Form::label('password', 'Mot de passe') }}
        {{ Form::password('password', array('autocomplete'=>'off', 'class' => 'form-control')) }}
      </div>
      {{ Form::submit("Connexion", array("class"=>"btn btn-primary")) }}
      {{ Form::close() }}
    </div>
  </div>

</div>

@stop

1 个答案:

答案 0 :(得分:1)

我找到了一些时间来处理这个问题,问题来自于一个不幸的ajax调用“不需要的路线”(fournisseurs/ax_getListProduits)。在页面创建之后,这个ajax调用是,即使它返回404错误,Laravel也会在页面创建和表单提交之间更新url.intended会话变量。