是否可以将多个值传递给Laravel控制器

时间:2019-08-02 00:17:05

标签: laravel controller

我希望清理一些代码。只是为了使事情变得更紧凑。 尽管我当前的代码运行良好,但我还是想尝试一下。

目前我在考勤卷上有3个按钮,该按钮跳到控制器内的另一个公共功能,但主要区别是它们插入记录中的值和显示的消息

This is my controller
    public function paid($id)
    {
        $r = Roll::find($id);
        $rollid = Rollmapping::latest()->value('id');
        if ($r != null)
        {
            $r->status = "C";
            $r->paidrollid = $rollid;
            $r->save();
            Alert::Success('Member Paid', 'Member Paid Cash')->autoclose(1500);
            return redirect(action('RollController@index'));
        }
        return redirect(action('RollController@index'));
    }
    public function voucher($id)
    {
        $r = Roll::find($id);
        $rollid = Rollmapping::latest()->value('id');
        if ($r != null)
        {
            // Check if ActiveKids Balance is not less than 0
            if ($r->member->ActiveKids->sum('balance') >= 10)
            {
                // Update Roll Status
                $r->status = "V";
                $r->paidrollid = $rollid;
                $r->save();
                // Insert Record into ActiveKids Voucher
                $voucher = new ActiveKids();
                $voucher->member_id = $r->member_id;
                $voucher->voucher_number = 'Weekly Subs';
                $voucher->balance = -10;
                $voucher->date_received = Carbon::now()->toDateString();
                $voucher->save();

                if(ActiveKids::Where('member_id','=', $r->member_id)->sum('balance') = 0)
                {
                    Alert::Success("Paid", "Member Voucer Balance is now $0")->autoclose(1500);
                }
                else
                {
                Alert::Success("Paid", "Member paid from Voucher Balance")->autoclose(1500);
                }
                return redirect(action('RollController@index'));
            }
            else
            {
                //Not Enough money in the account
                Alert::Error("Error", "Insufficient Active Kids Balance")->autoclose(1500);
                return redirect(action('RollController@index'));
            }
        }
        return redirect(action('RollController@index'));
    }
    public function notpaid($id)
    {
        $r = Roll::find($id);
        if ($r != null)
        {
            $r->status = "P";
            $r->save();
            return redirect(action('RollController@index'))->with ('success', 'Member Present');
        }
        return redirect(action('RollController@index'));
    }

我将其链接到具有第二个值的1个函数的链接 例如(如果可能)

public function paid($id, $type)

然后我可以使用IF语句

    if($type = 'C')
    //Action for $type = C
    elseif($type = 'V')
    //Action for $type = V
    elseif($type = 'P')
    //Action for $type = P
    endif

这是视图中的3按钮

    <a href="{{action('RollController@paid', $r->id)}}" title="Paid" class="btn btn-success btn-round"><i class="material-icons">done</i></a>
    <a href="{{action('RollController@voucher', $r->id)}}"  title="Voucher" class="btn btn-info btn-round"><i class ="material-icons">local_activity</i></a>
    <a href="{{action('RollController@notpaid', $r->id)}}" title="Not Paid" class="btn btn-danger btn-round"><i class="material-icons">close</i></a>

所以我希望有这样的东西

    <a href="{{action('RollController@paid', $r->id, 'C')}}" .....
    <a href="{{action('RollController@paid', $r->id, 'V')}}" .....
    <a href="{{action('RollController@paid', $r->id, 'P')}}" .....

会没事的

1 个答案:

答案 0 :(得分:0)

是的,您可以假设它们都是相同的请求类型。您将需要处理控制器内部的逻辑,然后处理事件总线或事件函数以完成其余工作。例如

    if($request->input('feature') == $PAID){
      $this->paid($request);
    } elseif($request->input('feature') == $VOUCHER){
      $this->voucher($request);
    } else{
      $this->notPaid($request)
    }

我敢肯定,有一种更好的方法可以完成此操作,而不是嵌套else语句,但这对于您所要求的应该可以正常工作。

但是,如果您不喜欢这样做,可以使用反射(如果选择此路径,请确保您具有良好的错误处理能力)

相关问题