【问题标题】:Passing default values in Laravel 4 route like in ZF2在 Laravel 4 路由中传递默认值,如 ZF2
【发布时间】:2014-09-05 08:32:07
【问题描述】:

在 ZF2 中,我可以这样创建路线:

'member-login-after-expired-session' => array(
    'type'     => 'segment',
    'options'  =>  array(
        'route'    =>  '/loginAgain',
        'defaults' =>  array(
            'controller' => 'Foo\Controller\Bar',   
            'action'     => 'someMethod',
            'activity'   => 'login',
            'reason'     => 'expired-session',
),),),

可以在 domain.com/loginAgain 访问此路由,并将传递两个参数“activity”和“reason”它们不在 url 中。我可以通过以下方式在分配的 zf2 控制器中访问这些参数以及任何其他参数:

$this->params('activity')
$this->params('reason')

如何在 Laravel 4.2 中实现这一点?

到目前为止,我在 (http://laravel.com/docs/routing) 处阅读的文档表明所有参数都必须通过实际 url 传递,这不是我想要的。我试过这个:

Route::get
(
    '/loginAgain',
    array
    (
        'as'        =>  'loginAgain',
        'uses'      =>  'BarController@someMethod',
    ),
    array
    (
        'activity'  =>  'login',
        'reason'    =>  'expired-session',
    )
)

附带的控制器如下:

class BarController extends BaseController
{
    public function someMethod($activity, $reason)
    {
        echo $activity;
        echo $reason;
     ...

但是,我得到了缺少参数的错误。我到底应该做什么工匠?

【问题讨论】:

  • 这与zf2无关,删除标签因为zf2用户将无法回答这个Laravel问题。
  • 不知道有没有使用 laravel 经验的 zf2 程序员能回答这个问题?特别是因为原始路线特定于 zf2 而所需的路线特定于 laravel 4?
  • 嗯,这就像“嘿,我在 X 中发现了一个很酷的功能,我可以在 Y 中做到这一点”。关键是您需要 Y 位专家,而不是 X。您为 Laravel 用户很好地解释了路由功能,因此他们能够理解您的问题 :)
  • 我需要 Y 位有 X 经验的专家。原来的路由结构不是通用的,它是 X 特定的。所需的路由结构希望是特定于 Y 的。我试图避免出现潜在答案被排除在外的情况,因为只允许 Y 答案

标签: php laravel-4 routing


【解决方案1】:

如果我对你的理解正确 - 这会起作用

Route::get('/login/{param1}/{param2}', ['uses' => 'BarController @someMethod']);
Route::get('/login',  ['uses' => 'BarController @otherMethod']);

然后在你的控制器中我会这样做

class BarController extends BaseController
{
    public function someMethod($activity, $reason)
    {
        echo $activity;
        echo $reason;
        ...
    }


    public function otherMethod()
    {
        return $this->someMethod('default1', 'default2');
    }

或者这可能有效(未经测试)

Route::get('/login/{param1}/{param2}', ['uses' => 'BarController @someMethod']);
Route::get('/login',  ['uses' => 'BarController @someMethod']);

然后在你的控制器中

class BarController extends BaseController
{
    public function someMethod($activity = 'default1', $reason = 'default2')
    {
        echo $activity;
        echo $reason;
        ...
    }

【讨论】:

  • 这绝对有效,并且完成了工作,这就是重点。它不是特定于 Laravel 的路由结构,但仍然很干净。我在类中添加了属性并使用 otherMethod 调用“设置”它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 2012-03-16
  • 2015-10-30
相关资源
最近更新 更多