Quand j'ai parcouru Laravel Document sur la partie thématique Eloquent ORM, j'ai trouvé un nouveau terme Mass Assignment
.
Le document montre comment effectuer une attribution en masse et les paramètres de propriétés fillable
ou guarded
. Mais après avoir traversé cela, je n'avais pas clairement compris Mass Assignment
et comment cela fonctionne.
Dans mon expérience passée avec CodeIgniter, je n'ai pas non plus entendu parler de ce terme.
Quelqu'un at-il une explication simple à ce sujet?
php
laravel
mass-assignment
Chen-Tsu Lin
la source
la source
Réponses:
L'affectation en masse se produit lorsque vous envoyez un tableau à la création du modèle, en définissant essentiellement un tas de champs sur le modèle en une seule fois, plutôt qu'un par un, quelque chose comme:
(Au lieu de définir explicitement chaque valeur sur le modèle séparément.)
Vous pouvez utiliser
fillable
pour protéger les champs que vous souhaitez que cela autorise réellement à la mise à jour.Vous pouvez également empêcher tous les champs d'être assignables en masse en procédant comme suit:
Disons que dans votre table utilisateur, vous avez un champ qui est
user_type
et qui peut avoir des valeurs utilisateur / adminÉvidemment, vous ne voulez pas que les utilisateurs puissent mettre à jour cette valeur. En théorie, si vous utilisez le code ci-dessus, quelqu'un pourrait injecter dans un formulaire un nouveau champ
user_type
et envoyer `` admin '' avec les autres données du formulaire, et changer facilement son compte en compte administrateur ... mauvaise nouvelle.En ajoutant:
Vous vous assurez que seules ces valeurs peuvent être mises à jour à l'aide de
mass assignment
Pour pouvoir mettre à jour la
user_type
valeur, vous devez la définir explicitement sur le modèle et l'enregistrer, comme ceci:la source
$user = new User(Input::all());
(en tant que programmeur), il est si incontrôlé (ou dans quel scénario serait-ce utile).$user = new User; $user->name = 'Neo';
L'affectation en masse est un processus d'envoi d'un tableau de données qui seront enregistrées simultanément dans le modèle spécifié. En général, vous n'avez pas besoin d'enregistrer les données de votre modèle une par une, mais plutôt en un seul processus.
L'affectation de masse est bonne, mais il y a certains problèmes de sécurité derrière elle. Que faire si quelqu'un transmet une valeur au modèle et sans protection, il peut définitivement modifier tous les champs, y compris l'ID. Ce n'est pas bon.
Supposons que vous ayez une table "étudiants", avec les champs "student_type, first_name, last_name" . Vous voudrez peut-être attribuer en masse "first_name, last_name", mais vous voulez éviter que le student_type soit directement modifié. C'est là que les champs remplissables et gardés ont lieu.
Fillable vous permet de spécifier quels champs sont assignables en masse dans votre modèle, vous pouvez le faire en ajoutant la variable spéciale
$fillable
au modèle. Donc dans le modèle:les ' student_type ' ne sont pas inclus, ce qui signifie qu'ils sont exemptés.
Guarded est l'inverse de fillable. Si remplissable spécifie les champs à attribuer en masse, guarded spécifie quels champs ne peuvent pas être affectés en masse. Donc dans le modèle:
vous devez utiliser $ fillable ou $ guarded - pas les deux.
Pour plus de détails, ouvrez le lien: - Affectation en masse
la source
L'affectation en masse signifie que vous remplissez une ligne avec plusieurs colonnes à l'aide d'un tableau de données. (un peu un raccourci au lieu de construire manuellement le tableau) en utilisant
Input::all()
.Techniquement juste du haut de ma tête. Remplissable signifie quelles colonnes du tableau peuvent être insérées, gardé signifie que le modèle ne peut pas s'insérer dans cette colonne particulière.
Notez que lorsque vous essayez de faire une affectation en masse avec like, insérez dans une colonne nommée "secret", et que vous avez spécifié qu'elle est gardée, vous pouvez essayer de l'insérer via le modèle, mais elle ne sera jamais vraiment insérée dans la base de données.
C'est pour la sécurité et la protection de votre table lors de l'utilisation du modèle. L'affectation de masse semble être juste un avis ou un avertissement indiquant que vous n'avez pas indiqué au modèle ce qui peut être rempli et protégé et le rend vulnérable à certaines attaques.
la source
C'est à ce moment qu'un tableau de données reçues est enregistré à la fois dans un modèle.
En raison des problèmes de sécurité liés à cette méthode dans laravel, il est recommandé de définir les champs que vous souhaitez que les données demandées remplissent sur le modèle.
Vous pouvez utiliser la
$fillable
variable pour définir les champs que vous souhaitez renseigner sur la table de base de données.Par exemple
Lorsque laravel détecte que vous attribuez des données en masse, il vous oblige à définir les champs que vous souhaitez affecter en masse dans la classe de modèle.
Quelqu'un peut facilement transmettre des données indésirables sous une forme html à votre base de données.
la source