web-dev-qa-db-fra.com

Route d'appel à partir du bouton, cliquez sur laravel

J'utilise le Laravel framework et le moteur de modèle de lame pour l'un de mes projets, où j'ai un itinéraire qui ressemble à

Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem');

J'ai editProblem méthode dans AdminController qui retourne une vue

public function editProblem(Problem $problem) {
        return view('admin.problem-edit', compact('problem'));
    }

et j'ai un bouton sur une vue qui ressemble à

<button class="btn btn-xs btn-info pull-right">Edit</button>

Maintenant, je veux appeler cette route avec le $problem->id lorsque le bouton sera cliqué. J'ai besoin de transmettre ces valeurs sur l'itinéraire.

comment puis je faire ça?

7
rimonmostafiz

À mon avis, vous devez utiliser url () Laravel method

Pour vous appeler route avec l'ID du problème, vous pouvez faire:

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

J'ai utilisé une balise d'ancrage, mais elle sera rendue comme votre balise de bouton car j'ai conservé la même classe de style que vous avez définie.

Pourquoi devriez-vous utiliser la méthode url ()?

La raison est simple, la méthode url obtiendra l'url complète de votre contrôleur. Si vous ne l'utilisez pas, le lien href sera ajouté à l'url actuelle.

Par exemple, supposez que votre bouton se trouve à l'intérieur d'une page donnée

votredomaine.com/a-given-page/

lorsque quelqu'un clique sur votre bouton, le résultat sera:

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

quand vous souhaitez obtenir ceci:

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

Quelques considérations sur votre méthode editProblem

Votre itinéraire a le "$ id", vous devez donc recevoir ce "$ id" dans votre méthode

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

Essaye ça:

<button type="button" onclick="window.location='{{ url("users/index") }}'">Button</button>

Petite suggestion: Lorsque vous définissez des itinéraires dans laravel donnez-lui un nom unique, cela vous aide à garder une trace sur chaque URL comme celle-ci

Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem')->name('pEdit');
Route::post('/problems/{problem-id}/edit', 'AdminController@editProblem')->name('pEdit');

Maintenant, vous utilisez cette route dans la lame avec juste le nom du message et obtenez les deux

<button type="button" onclick="window.location='{{ route("pEdit",array("parameter1")) }}'">Button</button>
5
Vipertecpro

Vous devrez créer un lien vers cet itinéraire:

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

Si vous utilisez des routes nommées, ce sera encore plus facile:

Route::get('/problems/{problem-id}/edit', ['as' => 'problems.edit', 'uses' => 'AdminController@editProblem']);

Et puis il vous suffit d'appeler la méthode route:

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