【问题标题】:Laravel 4 : How to pass multiple optional parametersLaravel 4:如何传递多个可选参数
【发布时间】:2014-06-30 22:15:14
【问题描述】:

我是 laravel 的新手,我真的很难理解如何传递多个可选的 url 参数。

向控制器传递 3 个可选参数时,编码路由的标准方法是什么?

还有没有办法编写一个路由来允许将命名参数传递给控制器​​?

public/test/id=1&page=2&opt=1
or 
public/test/id=1/page=2/opt=1

感谢您的帮助

【问题讨论】:

  • id=1&page=2&opt=1 是向服务器传输参数的经典老方法; id/1/page/2/opt/1 是新的框架方式。
  • 安德鲁这种技术叫什么名字?谢谢

标签: php laravel laravel-routing


【解决方案1】:

如果你有多个可选参数

Route::get('test',array('as'=>'test','uses'=>'HomeController@index'));

在你的控制器内部

 class HomeController extends BaseController {
    public function index()
    {
       // for example public/test/id=1&page=2&opt=1
       if(Input::has('id'))
           echo Input::get('id'); // print 1
       if(Input::has('page'))
           echo Input::get('page'); // print 2
       //...
    }
 }

【讨论】:

    【解决方案2】:

    命名参数通常作为路段完成,但没有明确的命名。因此,例如,您可以这样做:

    Route:get('test/{id?}/{page?}/{opt?}', function ($id = null, $page = null, $opt = null) {
        // do something
    });
    

    $id$page$opt 在此处都是可选的,由段定义中的 ? 定义,并且它们在函数中具有默认值。但是,您会注意到这里有一些问题:

    1. 它们必须以正确的顺序出现在 URL 中
    2. 只有$opt 是真正可选的,如果$opt 是,则必须提供$page,如果$page 是,则必须提供$id

    这是 Laravel 将命名段映射到函数/方法参数的方式带来的限制。但是,理论上您可以实现自己的逻辑来完成这项工作:

    Route:get('test/{first?}/{second?}/{third?}', function ($first = null, $second = null, $third = null) {
        if ($first) {
            list($name, $value) = @explode('=', $first, 2);
            $$name = $value;
        }
        if ($second) {
            list($name, $value) = @explode('=', $second, 2);
            $$name = $value;
        }
        if ($third) {
            list($name, $value) = @explode('=', $third, 2);
            $$name = $value;
        }
    
        // you should now have $id, $page and $opt defined if they were specified in the segments
    });
    

    并不是说这是一个非常幼稚的解决方案,依靠= 的盲目爆炸以及设置任意输入变量的名称(这显然是在自找麻烦)。您应该在此代码中添加更多检查,但它应该让您了解如何克服上述两个问题。

    可能应该指出,这有点违背在 Laravel 中进行路由和 URI 的“正确方式”,所以除非你真的需要这个功能,否则你应该重新考虑你的形成方式将这些 URI 转换为 Laravel 框架更适合设置的方式。

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多