Ao ler o documento do Laravel sobre a parte do tópico Eloquent ORM, recebi um novo termo Mass Assignment
.
Documento show Como executar a atribuição em massa e as configurações fillable
ou guarded
propriedades. Mas depois de passar por isso, eu não entendi claramente sobreMass Assignment
e como funciona.
Na minha experiência anterior no CodeIgniter, também não ouvi falar desse termo.
Alguém tem uma explicação simples sobre isso?
php
laravel
mass-assignment
Chen-Tsu Lin
fonte
fonte
Respostas:
A atribuição em massa é quando você envia uma matriz para a criação do modelo, basicamente configurando vários campos no modelo de uma só vez, em vez de um por um, algo como:
(Em vez de definir explicitamente cada valor no modelo separadamente.)
Você pode usar
fillable
para proteger quais campos você deseja que isso permita a atualização.Você também pode impedir que todos os campos sejam atribuíveis em massa, fazendo o seguinte:
Digamos que na sua tabela de usuários você tenha um campo que seja
user_type
e que possa ter valores de user / adminObviamente, você não deseja que os usuários possam atualizar esse valor. Em teoria, se você usasse o código acima, alguém poderia injetar em um formulário um novo campo
user_type
e enviar 'admin' junto com os outros dados do formulário, e facilmente mudar a conta deles para uma conta de administrador ... más notícias.Adicionando:
Você está garantindo que apenas esses valores possam ser atualizados usando
mass assignment
Para poder atualizar o
user_type
valor, você precisa defini-lo explicitamente no modelo e salvá-lo, assim:fonte
$user = new User(Input::all());
(como programador) que é tão descontrolado (ou em que cenário seria útil).$user = new User; $user->name = 'Neo';
A atribuição em massa é um processo de envio de uma matriz de dados que serão salvos no modelo especificado de uma só vez. Em geral, você não precisa salvar os dados no seu modelo individualmente, mas em um único processo.
A atribuição em massa é boa, mas há alguns problemas de segurança por trás disso. E se alguém passa um valor para o modelo e sem proteção, ele pode definitivamente modificar todos os campos, incluindo o ID. Isso não é bom.
Vamos dizer que você tem a tabela 'estudantes', com campos "student_type, first_name, last_name” . Você pode querer atribuir massa 'first_name, last_name', mas que pretende proteger student_type de ser alterado diretamente. É aí que fillable e vigiado ter lugar.
Preenchível permite especificar quais campos são atribuíveis em massa no seu modelo. Você pode fazê-lo adicionando a variável especial
$fillable
ao modelo. Então, no modelo:o ' student_type ' não está incluído, o que significa que eles estão isentos.
Guardado é o inverso do preenchível. Se preenchível especificar quais campos serão atribuídos em massa, guardado especifica quais campos não são atribuíveis em massa. Então, no modelo:
você deve usar $ fillable ou $ guarded - não os dois.
Para mais detalhes, acesse o link: - Atribuição em massa
fonte
Atribuição em massa significa que você está preenchendo uma linha com mais de uma coluna usando uma matriz de dados. (um pouco de um atalho em vez de criar manualmente a matriz) usando
Input::all()
.Tecnicamente, apenas do topo da minha cabeça. Preenchível significa que colunas da tabela podem ser inseridas, protegido significa que o modelo não pode inserir nessa coluna específica.
Observe que quando você tenta fazer uma atribuição em massa com like, insere em uma coluna chamada "segredo" e especifica que ela é protegida, você pode tentar inseri-la através do modelo, mas ela nunca será realmente inserida em o banco de dados.
Isso é para segurança e proteção na sua mesa ao usar o modelo. A atribuição em massa parece ser apenas um aviso ou aviso de que você não disse ao modelo quais são preenchíveis e protegidos e o torna vulnerável a algum tipo de ataque.
fonte
É quando uma matriz de dados recebidos é salva ao mesmo tempo em um modelo.
Devido aos problemas de segurança com esse método no laravel, é recomendável definir os campos que você deseja que os dados solicitados preencham no Modelo.
Você pode usar a
$fillable
variável para definir os campos que deseja preencher na tabela do banco de dados.Por exemplo
Quando o laravel detecta que você está atribuindo dados em massa, ele o força a definir os campos que deseja atribuir em massa na classe de modelo.
Alguém pode facilmente passar dados indesejados para um formulário html no seu banco de dados.
fonte