Para utilizar o que foi feito basta clonar o repositório:
Após clonar o repositório entre na raiz do projeto e execute o seguinte comando
Como no exemplo anterior já temos a migration necessitamos apenas da criação dos seguintes itens:
Controllers
Models
Views
Create = Cadastro
Vamos começar pela letra C do CRUD nesse caso o create para isso iremos começar criando a nossa model. mas antes disso logo após a instalação das dependências vá no arquivo config/db.php e altere as configurações de banco de dados(inserindo as suas credenciais). Após as configurações de banco de dados execute as migrations executando o comando abaixo:
Depois disso vá a pasta models e crie o seguinte arquivo Clients.php, a principio o nosso modelo irá ficar igual o abaixo:
Note que o modelo herda da classe ActiveRecord(em extends ActiveRecord) classe responsável por implementar o design pattern de mesmo nome, essa classe em conjunto com outras classes responsáveis pela abstração de banco de dados utilizam o PHP Data Objects (PDO), para mais informações veja:
o metódo estático tableName é responsável por retornar o nome da tabela atrelada ao model. Já o método rules é responsável por realizar as validações dos dados recebidos e também por habilitar o Massive Massignment (atribuição massiva) por meio da validação do tipo safe.
OBS: Também é possível criar o modelo utilizando o GII por meio do seguinte comando :
Executando esse comando você já irá obter o seu model configurado de acordo com os campos especificados na migration
Para criar o nosso controller e consequentemente o GII(O terminal do Yii Framework) irá criar as views, para isso execute o seguinte comando:
Note que foi criada uma pasta chamada clients dentro da pasta views e dentro dessa pasta foi criado um arquivo index.php, o mesmo será utilizado posteriormente para a listagem dos nossos registros.
Para facilitar o acesso a rotas vamos criar mais uma opção de menu para isso vá no arquivo: views/layouts/main.php e adicione mais uma opção de menu dentro do de echo Nav::widget no array itens adicionando mais um indice ao mesmo:
Crie um arquivo dentro de views/clients chamado create.php e neste arquivo iremos criar o seguinte formulário:
Note que antes do formulário propriamente dito, estamos utilizando um helper de URL ** yii\helpers\Url, com a utilização dessa classe
conseguimos utilizar o método **Url::to([‘clients/create’]) dentro desse método informamos em um array o nome da controller/método.
Note que criamos um campo do tipo hidden com o nome esse atributo da aplicação (\yii::$app->request->csrfParam;) irá atribuir o nome _csrf e o outro (\yii::$app->request->csrfToken;) irá imprimir o token. Isso serve para evitar ataques do tipo CSRF - Cross-Site Request Forgery (CSRF) onde esse token que foi gerado no nome desse campo se torna uma sessão no servidor e ao enviar o formulário ele verifica se essa seção existe. Isso serve para evitar ataques aonde um site ou outra aplicação que não seja a “sua” forje uma requisição. Para mais informações a respeito de CSRF acesse:
E os demais dados do formulário são relativos aos nomes de campos onde esses nomes são iguais aos nomes definidos na migration e o envio do mesmo
Agora precisamos ir no arquivo controllers/ClientsController e criar o método create. Os métodos no Yii utilizam o o prefixo action antes do nome do método.
A primeira linha é um helper de aplicação do Yii que obtém os dados da requisição é armazena o mesmo na váriavel $request depois em $request->isPost ele verifica se a requisição realizada utiliza o verbo
http post caso seja verdade significa que é um cadastro, logo após isso é instânciado o modelo $model = new Clients(); e também obtidos os atributos do mesmo $model->attributes.
OBS: Apesar de não termos definidos explicitamente atributos em nosso model, o ActiveRecord obtem os nomes declarados na tabela.
Já o $request->post(); obtem todos os dados submetidos no formulário, e o $model->save(); salva os dados em nosso banco de dados.
Read = Listagem
Após ter realizado o C de nosso CRUD agora esta na hora de implementarmos a letra R, para isso vá no arquivo Agora precisamos ir no arquivo controllers/ClientsController e vá até o método actionIndex:
Para obter a listagem de todos os clientes, precisamos de uma instância do model Clients e depois precisamos acessar os métodos Clients::find()->all, ao fazer isso basta armazernar em uma variável e passar em forma
de array para o método render return $this->render(‘index’, [‘clients’ => $clients]);
Após a criação do método index no controller, precisamos abrir o arquivo views/clients/index.php e realizar a criação de nossa tabela para a exibição dos dados:
Com isso temos o nosso cadastro e a listagem feita, faltando apenas realizar o teste:
1- Enviando os dados
2- Listagem de clientes
Update = Atualização
Agora vamos para a letra U rs! Para isso precisamos ir no arquivo controllers/ClientsController e criar o método update (actionUpdate), diferente do método create esse irá receber por parâmetro o $id do registro que será editado.
Para que possamos receber esse parâmetro via url no seguinte formato clients/id/update, precisamos registrar essa rota no arquivo config/web.php php no array rules :
O <id:\d+> é uma regex que diz que para receber apenas números positivos. Agora o nosso método actionUpdate:
Veja que ele tem similaridades com o método actionCreate, o que diferencia é que precisamos consultar o id recebido então para isso criamos uma instância do modelo e utilizamos o método findOnde: $model = Clients::findOne($id);
Caso o registro não exista iremos retornar uma exceção utilizando uma instância de NotFoundHttpException passando a mensagem. Essa classe irá retornar a mensagem e a página irá ter o status code 404. Conforme imagem apresentada abaixo:
O restante do método é bem similar ao método actionCreate.
Para finalizar a funcionalidade precisamos criar o formulário, para isso precisamos criar um arquivo chamado update.php em views/clients:
O formulário também é bem similar ao do arquivo create.php, com exceção de carregar o valor atribuido ao registro por meio do value do input, o contéudo da variavel model veio do método render na controller. Para finalizar o editar vá no arquivo views/clients/index.php e adicione na listagem o botão de editar:
Delete = Excluir
Enfim chegamos ao D do CRUD. Para isso precisamos registar a rota para que possamos receber o id do registro via parâmetro no seguinte formato clients/id/delete, para isso vá no arquivo: config/web.php :
Agora precisamos criar o nosso método delete (actionDelete), no arquivo controllers/ClientsController.php :
Bom esse foi o post/tutorial de criação de CRUD no Yii2, lembrando que o Yii possui uma forma mais fácil para criação de CRUD, a mesma iremos ver nos proximos posts. E ai o que achou ? comente abaixo.