私のプロジェクトの1つにLaravelフレームワークとブレードテンプレートエンジンを使用しています。
Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem');
私はeditProblemAdminControllerのメソッドを使用してビューを返します
public function editProblem(Problem $problem) {
return view('admin.problem-edit', compact('problem'));
}
そして、私は次のようなビューにボタンを持っています
<button class="btn btn-xs btn-info pull-right">Edit</button>
次に、ボタンがクリックされるときに$problem->id
を使用してこのルートを呼び出します。これらの値をルートで渡す必要があります。
どうやってやるの?
問題のIDを使用してルートを呼び出すには、次のようにします。
<a href="{{ url('/problems/' . $problem->id . '/edit') }}" class="btn btn-xs btn-info pull-right">Edit</a>
アンカータグを使用しましたが、定義したのと同じスタイルクラスを保持したため、ボタンタグのようにレンダリングされます。
理由は簡単です。urlメソッドはコントローラーの完全なURLを取得します。これを使用しない場合、hrefリンクには現在のURLが追加されます。
たとえば、ボタンが特定のページ内にあるとします
yourdomain.com/a-given-page/
誰かがボタンをクリックすると、結果は次のようになります。
yourdomain.com/a-given-page/problems/{problem-id}/edit
これを取得したい場合:
yourdomain.com/problems/{problem-id}/edit
ルートには「$ id」があるため、メソッドでこの「$ id」を受け取る必要があります
public function editProblem($problem_id) {
$problem = \App\Problem::find($problem_id); //If you have your model 'Problem' located in your App folder
return view('admin.problem-edit', compact('problem'));
}
これを試して:
<button type="button" onclick="window.location='{{ url("users/index") }}'">Button</button>
小さな提案: laravelに一意の名前を付けてルートを定義する場合、このように各URLを追跡するのに役立ちます
Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem')->name('pEdit');
Route::post('/problems/{problem-id}/edit', 'AdminController@editProblem')->name('pEdit');
ブレードでこのルートを使用して、ポストの名前だけで両方を取得します
<button type="button" onclick="window.location='{{ route("pEdit",array("parameter1")) }}'">Button</button>
このルートへのリンクを作成する必要があります。
<a href="/problems/{{ $problem->id }}/edit" class="btn btn-xs btn-info pull-right">Edit</a>
名前付きルートを使用する場合、これはさらに簡単になります。
Route::get('/problems/{problem-id}/edit', ['as' => 'problems.edit', 'uses' => 'AdminController@editProblem']);
そして、あなたはただroute
メソッドを呼び出す必要があります:
<a href="{{ route('problems.edit', $problem->id) }}" class="btn btn-xs btn-info pull-right">Edit</a>