Je veux interroger db en utilisant deux paramètres qui seront facultatifs, j'ai donc défini une route comme:
web.php
public function index($subject = null, $sbj_type = null) { $questions; if (!$subject) { dd($subject); if (!$sbj_type) { $questions = Question::where(['subject_id' => $subject, 'sbj_type_id' => $sbj_type])->get(); } else { $questions = Question::where(['subject_id' => $subject])->get(); } } }
Après cela, j'ai créé une fonction dans QuestionController.php comme:
Route::get('question/{subject?}/{sbj_type?}', 'QuestionController@index')->name('question.index');
Après cela, j'ai inséré cette URL comme http: // localhost / digitalinvigilator / question? subject = 1
mais je reçois une valeur nulle à chaque fois.
Quelqu'un peut-il m'aider?
3 Réponses :
Je suppose que vous avez utilisé Request
pour accéder au paramètre de requête.
public function index(Request $request, $subject = null, $sbj_type = null) { $questions; if (!$request->has('subject)) { dd($subject); if (!$sbj_type) { $questions = Question::where(['subject_id' => $subject, 'sbj_type_id' => $sbj_type])->get(); } else { $questions = Question::where(['subject_id' => $subject])->get(); } } }
La condition peut être différente selon vos besoins dans If
Je n'ai pas de formulaire par lequel j'envoie Request . Pouvez-vous expliquer pourquoi vous avez utilisé Request?
Peu importe si vous n'utilisez pas de formulaire, le paramètre de requête peut être accédé par Request
. et si vous ne souhaitez pas utiliser Request
, envoyez les données subject
en tant que Route Parameter
Essayez ceci avec $ request
Sur votre Route / Web.php
public function index(Request $request){ $questions; if ($request->subject) { if (!$request->sbj_type) { $questions = Question::where(['subject_id' => $request->subject, 'sbj_type_id' => $request->sbj_type])->get(); } else { $questions = Question::where(['subject_id' => $request->subject])->get(); } } }
Sur votre contrôleur
Route::get('question', 'QuestionController@index')->name('question.index');
p>
Je n'ai pas de formulaire par lequel j'envoie Request. Pouvez-vous expliquer pourquoi vous avez utilisé Request?
Vous pouvez utiliser $ request sur n'importe quelle méthode get and post, essayez simplement ce mec et faites le moi savoir
Pour l'utiliser comme vous le spécifiez, vous devez utiliser la méthode query
sur l'objet Request
.
Vous avez également un bogue dans votre premier si, vous vérifiez si $ subject
est une valeur erronée. Donc, si ! $ Subject
est vrai, il continuera donc votre dd ($ subject)
affichera toujours null
ou une valeur fausse. Alors utilisez-le comme ceci:
public function index(Request $request) { $questions; if ($request->query('subject')) { dd($subject); if ($request->query('sbj_type')) { $questions = Question::where(['subject_id' => $request->query('subject'), 'sbj_type_id' => $request->query('sbj_type')])->get(); } else { $questions = Question::where(['subject_id' => $request->query('subject'))->get(); } } }
source: https://laravel.com/docs/5.7/requests#retrieving-input
question? subject = 1
est définitivement une URL incorrecte. Votre URL doit êtrequestion / 1
c'est un paramètre facultatif, alors je l'ai fait.
Le paramètre facultatif signifie que l'URL peut être soit
question
ouquestion / 1
ouquestion / 1/2
.Essayez Route :: get ('question / {: subject?} / {Sbj_type?}', 'QuestionController @ index') -> name ('question.index');
Oh! y a-t-il un moyen de le faire par
question? subject = 1
Vous pouvez le faire facilement avec $ request