2014-01-13 91 views
3

我目前正在试图路线如下:Laravel 4路由控制方法

  • 如果用户得到/account/
    • 如果会议有account_id,用户登录;显示他的帐户信息
    • 如果不是,用户未登录;显示登录/创建表单
  • 如果用户发布/account/
    • 如果输入有create,用户想要创建帐户;创建它
    • 如果不是,用户想要登录;发现他的帐户,然后再次以/account/

我的路线设置是这样的:

Route::get('account', function() { 
    if (Session::has('account_id')) 
     return '[email protected]'; 
    else 
     return '[email protected]'; 
}); 

Route::post('account', function() { 
    if (Input::has('create')) { 
     return '[email protected]'; 
    else  
     return '[email protected]'; 
)}; 

这有点我将如何使用Rails做,但我不知道怎么点到控制器方法。我只是得到返回的字符串。我没有在Laravel的文档中找到它(我发现它很差,或者我搜索错了?),在任何其他Web教程中都没有找到它。

+0

我没有试过,但是,这一个可以帮助你:HTTP:// laravel .com/api/source-class-Illuminate.Routing.Controllers.Controller.html#93-127 – alayli

回答

9

尝试以下操作:

Route::get('account', function() { 
    if (Session::has('account_id')) { 
     $action = 'show'; 
     return App::make('AccountsController')->$action(); 
    } 
    else { 
     $action = 'index'; 
     return App::make('AccountsController')->$action(); 
    } 
}); 

Route::post('account', function() { 
    if (Input::has('create')) { 
     $action = 'create'; 
     return App::make('AccountsController')->$action(); 
    } 
    else { 
     $action = 'login'; 
     return App::make('AccountsController')->$action(); 
    } 
)}; 
+0

使用过滤器实现此目的的最佳方法。我将尝试使用过滤器来实现一个示例。 – Anam

+0

工作过,谢谢! – ranisalt

0

所以,想要把所有的逻辑控制器。

你会想这样做

Route::get('account', '[email protected]'); 
Route::get('account', '[email protected]'); 

然后,在相应的控制器,你想使你的测试,然后执行,例如,

if (Session::has('account_id')){ 
    return Redirect::action('[email protected]'); 
} 
else{ 
    return Redirect::action('[email protected]'); 
} 

但是,请确保您定义每个动作的路由,所以你的应用程序可以检测到一个URL。
例如,如果你想有

Redirect::action('[email protected]') 

您需要定义这个动作,如:

Route::get('/account/show', '[email protected]') 
+0

那么,因为用户无法同时落入2类(如果他获得或发布,如果他是否登录等),我是否真的必须区分这些行为?我不想有更多的路线/页面,只是'/ accounts /'对于每一种控制器方法都是足够的 – ranisalt

+0

抱歉,不确定你到底在问什么。从技术上讲,你可以像以前那样将关闭放在routes.php文件中,但是最简单的方式是返回重定向动作。 – elliotanderson

相关问题