2
votes

Trop peu d'arguments pour fonctionner laravel 5.7

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?


6 commentaires

question? subject = 1 est définitivement une URL incorrecte. Votre URL doit être question / 1


c'est un paramètre facultatif, alors je l'ai fait.


Le paramètre facultatif signifie que l'URL peut être soit question ou question / 1 ou question / 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


3 Réponses :


0
votes

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


2 commentaires

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



2
votes

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>


2 commentaires

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



0
votes

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


0 commentaires