web-dev-qa-db-ja.com

ボタンクリックからのルートの呼び出しlaravel

私のプロジェクトの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を使用してこのルートを呼び出します。これらの値をルートで渡す必要があります。

どうやってやるの?

7
rimonmostafiz

私の意見では、url()Laravelメソッドを使用する必要があります

問題のIDを使用してルートを呼び出すには、次のようにします。

<a href="{{ url('/problems/' . $problem->id . '/edit') }}" class="btn btn-xs btn-info pull-right">Edit</a>

アンカータグを使用しましたが、定義したのと同じスタイルクラスを保持したため、ボタンタグのようにレンダリングされます。

Url()メソッドを使用する必要があるのはなぜですか?

理由は簡単です。urlメソッドはコントローラーの完全なURLを取得します。これを使用しない場合、hrefリンクには現在のURLが追加されます。

たとえば、ボタンが特定のページ内にあるとします

yourdomain.com/a-given-page/

誰かがボタンをクリックすると、結果は次のようになります。

yourdomain.com/a-given-page/problems/{problem-id}/edit

これを取得したい場合:

yourdomain.com/problems/{problem-id}/edit

EditProblemメソッドに関するいくつかの考慮事項

ルートには「$ 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'));
}
9
Geraldo Novais

これを試して:

<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>
5
Vipertecpro

このルートへのリンクを作成する必要があります。

<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>
3
Luis Dalmolin