[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Daniel Lopes Petersen
Criador Daniel Lopes Petersen 25/12/2023

Boa tarde Profº, Feliz Natal...

Estou obtendo um erro no Editar após implementar tudo até aqui.

Somente no update após finalizar a aula anterior, segue os dados do erro:

TypeError
PHP 8.1.1010.38.2
App\DTO\UpdateSupportDTO::__construct(): Argument #1 ($id) must be of type string, null given, called in C:\dev\curso10\app\DTO\UpdateSupportDTO.php on line 22
 
 
Ubiratan Lima 25/12/2023

Daniel. coloca o print do código aqui... vai facilitar a ajuda para voce.
https://uploaddeimagens.com.br/imagens/novo (aqui voce consegue enviar a imagem e colar aqui a url dela.

Ubiratan Lima
Manager Carlos Ferreira 25/12/2023

Olá, Daniel!

Tudo bem?

 

No seu DTO, está passando um valor null onde precisa ser uma string.

 

Compartilhe comigo o código, que te ajudo a identificar e resolver o problema.

Carlos Ferreira
Criador Daniel Lopes Petersen 25/12/2023

Segue o código:

<?php

namespace App\DTO;

use App\Http\Requests\StoreUpdateRequest;

class UpdateSupportDTO
{
    public function __construct(
        public string $id,
        public string $subject,
        public string $status,
        public string $body
    ){}

    public static function makeFromRequest(StoreUpdateRequest $request): self
    {
        return new self(
            $request->id,
            $request->subject,
            'a',
            $request->body
        );
    }
}
Daniel Lopes Petersen
Criador Daniel Lopes Petersen 25/12/2023

Bom dia Profº, onde estou no momento é bloqueado o acesso ao sites do tipo:

https://uploaddeimagens.com.br/imagens/novo

Daniel Lopes Petersen
Criador Daniel Lopes Petersen 25/12/2023

Profº estava verificando aqui pois o que fiz diferente é usar a rota padrão (simplificada)

Route::resource('/supports', SupportController::class);

As rotas ficaram assim:

GET|HEAD        supports ........................................................................................................................... supports.index › Admin\SupportController@index  

  POST            supports ........................................................................................................................... supports.store › Admin\SupportController@store  

  GET|HEAD        supports/create .................................................................................................................. supports.create › Admin\SupportController@create  

  GET|HEAD        supports/{support} ................................................................................................................... supports.show › Admin\SupportController@show  

  PUT|PATCH       supports/{support} ............................................................................................................... supports.update › Admin\SupportController@update  

  DELETE          supports/{support} ............................................................................................................. supports.destroy › Admin\SupportController@destroy  

  GET|HEAD        supports/{support}/edit .............................................................................................................. supports.edit › Admin\SupportController@edit  

 

Na verdade eu preciso usar desta forma sempre que possível, meu arquivo web estva ficando enorme cheio de rotas e desta forma fica melhor a visualização nos meus casos.

 

 

 

Daniel Lopes Petersen
Manager Carlos Ferreira 25/12/2023

O problema está no momento que instancia o DTO, no seu controller, tem o código no GitHub?

Carlos Ferreira
Criador Daniel Lopes Petersen 25/12/2023

Segue Profº

https://github.com/daniellpetersen/curso10

Daniel Lopes Petersen
Manager Carlos Ferreira 25/12/2023

Vou conferir agora

Carlos Ferreira
Manager Carlos Ferreira 25/12/2023

Aqui, nessa linha, precisa pegar $support->support:

https://github.com/daniellpetersen/curso10/blob/main/app/DTO/UpdateSupportDTO.php#L19

 

Ou passar o ID, igual fizemos no curso:

https://github.com/especializati/curso-de-laravel-10/blob/main/app/DTO/Supports/UpdateSupportDTO.php#L20

 

Note que passamos o id no método makeFromRequest;

Carlos Ferreira
Criador Daniel Lopes Petersen 25/12/2023

Bom dia Profº, 

realizei as alterações mas continua a mesma mensagem, criei uma nova dúvida e no subject coloquei o texto "Título exemplo" ao qual está vindo como o id, como segue no debug:

 

select count(*) as aggregate from `supports` where `id` = Titulo exemplo

 

Este é meu Controller, https://uploaddeimagens.com.br/imagens/lSxgUHE

 

Percebi que o "string $id" não está sendo utilizado para nada, o que posso fazer nesse caso?

 

Aqui está como ficou o arquivo do updateSupportDTO

 

https://uploaddeimagens.com.br/imagens/wFowIGI

 

Abraço.

 
Daniel Lopes Petersen
Manager Carlos Ferreira 25/12/2023

Boa!

 

Agora que incluiu o parametro $id, precisa passar ele no controller:

$support = $this->service->update(

    UpdateSupportDTO::makeFromRequest($request, $id),

);

https://github.com/daniellpetersen/curso10/blob/main/app/Http/Controllers/Admin/SupportController.php#L68

 

E no DTO, pode usar assim:

$id ?? $request->support ?? $request->id,

Carlos Ferreira
Criador Daniel Lopes Petersen 25/12/2023

100% Profº... tudo funcionando...

Muito Obrigado...

Daniel Lopes Petersen
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!