在laravel

时间:2016-05-12 09:31:29

标签: laravel laravel-5 laravel-5.1 laravel-5.2 vue.js

我有一个接受参数的自定义路由。这是:

Route::get('reservation/{id}/create', 
        ['as' => 'reservation.create', 'uses' => 'ReservationController@create'
]);

我有这个变量受保护的$ student_id。该id被分配给ReservationController的create方法的参数,如下所示:

class ReservationController extends Controller
{
    protected $student_id;

    public function index()
    {
        return $this->student_id;
    }

    public function create($id)
    {
        $this->student_id = $id;
        $subjects = Subject::with('sections')->get();

        return view('reservation.form',compact('subjects'));
    }

    public function store(Request $request)
    {

        $subject = new Reservation();

        $subject->section_subject_id = $request->sectionSubjectId;

        $subject->student_id = $this->student_id;

        $subject->save();

    }
}

在create方法上返回$ id参数时,我得到了确切的id号。我还用$ student_id分配了$ id。但是当在store方法上分配$ student_id时,我得到null值。我知道我在这里做错了,有人可以帮我解决这个问题。

好的,所以让我添加一些信息:在我的网址中使用reservation.create路由时我有这个地址localhost:8000 / reservation / 1 / create 该网址中的数字1是我想要的学生ID,并在我的商店方法中分配给student_id。

我也有这个表单视图:

form.blade.php

<body>
 @foreach($subjects as $subject)
 @foreach($subject->sections as $section)
   <tr>
   <td>{{ $section->section_code }}</td>
   <td>{{ $subject->subject_code }}</td>
   <td>{{ $subject->subject_description }}</td>
   <td>{{ $section->pivot->schedule }}</td>
   <td>{{ $subject->units }}</td>
   <td>{{ $section->pivot->room_no }}</td>
   <td>
     <button 
        v-on:click="addSubject( {{ $section->pivot->id }} )" 
        class="btn btn-xs btn-primary">Add
      </button>

      <button class="btn btn-xs btn-info">Edit</button>
    </td>
   </tr>
   @endforeach
  @endforeach
 </body>

同时我制作了vue.js和vue-resource

all.js

methods:{
    addSubject: function(id){

    this.$http({
    url: 'http://localhost:8000/reservation',   
    data: { sectionSubjectId: id },
    method: 'POST'
    }).then(function(response) {
        console.log('success');
    },function (response){
        console.log('failed');
        });
    }
}

1 个答案:

答案 0 :(得分:0)

您尝试在$this->student_id中保存变量,稍后在另一种方法中使用它。这不是这个工作原理。问题是这些方法在不同的HTTP请求中使用,因此不会保留变量。

您应该将此变量与reservation.form视图一起传递给store()方法。

您可以使用Request对象。在视图中:

<input name="studentId" type="hidden">{{ $studentId }}</input>

在控制器中:

$studentId = $request->get('studentId');

如果您想在store()方法中使用它,可以将其作为第二个参数传递。

 public function store(Request $request, $studentId)
 {
     echo $studentId;