Ir para conteúdo
Fórum Script Brasil

Pesquisar na Comunidade

Mostrando resultados para as tags ''laravel''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • Programação & Desenvolvimento
    • ASP
    • PHP
    • .NET
    • Java
    • C, C++
    • Delphi, Kylix
    • Lógica de Programação
    • Mobile
    • Visual Basic
    • Outras Linguagens de Programação
  • WEB
    • HTML, XHTML, CSS
    • Ajax, JavaScript, XML, DOM
    • Editores
  • Arte & Design
    • Corel Draw
    • Fireworks
    • Flash & ActionScript
    • Photoshop
    • Outros Programas de Arte e Design
  • Sistemas Operacionais
    • Microsoft Windows
    • GNU/Linux
    • Outros Sistemas Operacionais
  • Softwares, Hardwares e Redes
    • Microsoft Office
    • Softwares Livres
    • Outros Softwares
    • Hardware
    • Redes
  • Banco de Dados
    • Access
    • MySQL
    • PostgreSQL
    • SQL Server
    • Demais Bancos
  • Segurança e Malwares
    • Segurança
    • Remoção De Malwares
  • Empregos
    • Vagas Efetivas
    • Vagas para Estágios
    • Oportunidades para Freelances
  • Negócios & Oportunidades
    • Classificados & Serviços
    • Eventos
  • Geral
    • Avaliações de Trabalhos
    • Links
    • Outros Assuntos
    • Entretenimento
  • Script Brasil
    • Novidades e Anúncios Script Brasil
    • Mercado Livre / Mercado Sócios
    • Sugestões e Críticas
    • Apresentações

Encontrar resultados em...

Encontrar resultados que...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

  1. Esse é o código do teste.blade.php, onde uso o dialeto do Blade (o botão Modal) e o dialeto do Tailwinds (o modal na forma do título do texto): @vite(['resources/css/app.css', 'resources/js/app.js']) <pre class="w-1/2 mx-auto my-20"> O embaixador da União Europeia no Brasil, Ignacio Ybañez, refuta a ideia apresentada pelo presidente Luiz Inácio Lula da Silva de que democracia seja um conceito relativo. Ele faz questão de criticar a ditadura da Venezuela, aliada do governo brasileiro. “Para nós, a democracia não é relativa. Democracia existe ou não existe. Na Venezuela, não existe democracia. No Brasil, existe”, afirma o diplomata em entrevista à Coluna. “Eleições e o respeito aos direitos humanos são elementos essenciais na democracia. E isso não é cumprido na Venezuela”. </pre> <x-primary-button class="absolute left-80 ml-6" onclick="modal.className='absolute top-10 left-80 ml-6 bg-blue-700'"> {{ __('Modal') }} </x-primary-button> <div id=modal class=hidden onclick="modal.className='hidden'"> <h1 class=text-3xl>Democracia relativa</h1> </div> Esse é um código que eu consegui na base da tentativa e erro, eu queria alinhar o título do texto com o texto, mas o máximo que o Tailwind permitia era deslocar o título a 80 pixels a partir da margem esquerda ("left-80"). Para conseguir mais pixels, eu fiz uma gambiarra, eu usei o recurso margem esquerda assim "ml-6". Mas para isso funcionar, eu preciso usar o comando npm run dev ou npm run build, o que eu consigo fazer aqui no meu computador local. Esse não é o caso lá no Hostinger, a hospedagem do site que aluguei por R$ 23,00 por mês não permite usar o comando npm. Logo, o máximo que eu consegui hospedar no Hostinger foi um Laravel bem básico, ou seja, ele não tem o Breeze, o Blade do Breeze e muito menos o projeto Chirp. O meu Laravel no Hostinger é basicamente um xerox do projeto que eu fiz no PHP. Eu coloquei o CDN do Bootstrap no arquivo menu.php e carrego esse arquivo nos outros códigos. Para resolver o meu problema, eu só preciso mudar de plano, mudar para a hospedagem VPS. Eu não tenho a menor ideia de como o VPS funciona. Uma coisa é digitar npm aqui no computador local e outra bem diferente é digitar o comando lá no servidor. Antes de mudar de plano, estou estudando o Tailwind por aqui, até eu me sentir 2% seguro com um novo dialeto do CSS.
  2. Em 2020 comecei a estudar o PHP, e lá eu conheci o mysqli que o PHP usa para trabalhar com o banco de dados do MySQL. Em 2022 comecei a estudar o Laravel, e lá eu conheci o Eloquent, ele faz a mesma coisa que o mysqli do PHP mas usa uma gramática bem mais robusta, uma verdadeira obra de arte. O problema é: quantas vezes eu posso usar o mysqli ou o Eloquent? Como eu apanho muito para trabalhar com vetores, eu pedi para o mysqli ou o Eloquent olhar três vezes o banco de dados, uma vez para consultar os lançamentos do dia, outra vez para somar os débitos daquele dia e mais uma vez para consultar a soma dos créditos daquele dia. Eu acordei de madrugada, e decidi estudar os vetores do PHP, e lá vi array_sum, array_filter, array_column. Foram várias tentativas e erros e nenhuma deu certo, mas finalmente consegui achar uma solução: <?php // tbdiario (docto,lcto,dia,contad,contac,valor,historico) // docto : auto_increment, primary_key $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from tbdiario where dia='2023-07-22'"); $extrato=$query->fetch_all(MYSQLI_ASSOC); $debito=[]; $credito=[]; foreach($extrato as $key=>$sub){ if($sub['contad']){$debito[]=$sub['valor'];} if($sub['contac']){$credito[]=$sub['valor'];}} var_dump(array_sum($debito),array_sum($credito)); E no Laravel, ficou assim: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbdiario; use App\Models\tbsupervariavel; use Auth; class DiarioController extends Controller { public function extrato(Request $request) { if($request->input('dia')){ tbsupervariavel::where('codsuper',Auth::id())->update(['dia'=>$request->input('dia')]);} $dia=tbsupervariavel::where('codsuper',Auth::id())->value('dia'); $extrato=tbdiario::where('dia',$dia)->get(); $debito=[]; $credito=[]; foreach($extrato->toArray() as $key=>$sub){ if($sub['contad']){$debito[]=$sub['valor'];} if($sub['contac']){$credito[]=$sub['valor'];}} $somad=array_sum($debito); $somac=array_sum($credito); return view('diario',compact('extrato'),['somad'=>$somad,'somac'=>$somac]);} } Se alguém sugerir usar a função soma no Collections do Laravel, eu tentei por dois anos e não consegui.
  3. Eu gostei do Bard. Eu estou estudando welcome.blade.php, onde encontrei essa função: app()->getLocale() O Bard me explicou que The app()->getLocale() method in Laravel returns the current locale of the application. The locale is used to determine which language and cultural settings should be used for the application. The default locale is set in the config/app.php file. Eu fui ver config > app.php e encontrei isso <?php use Illuminate\Support\Facades\Facade; return ['locale' => 'en']; Eu fiquei impressionado. Como é que eu vou simular um negócio desses no PHP? O Bard disse The Laravel class Facade is located in the Illuminate\Support\Facades namespace. You can find the source code for this class in the Laravel Framework repository on GitHub. E assim consegui chegar em framework/src/Illuminate/Support/Facades/Facade.php at 10.x · laravel/framework · GitHub Conclui que o Laravel não é apenas um projeto de 9.000 arquivos que você cria com o composer create-project laravel/laravel projeto, o projeto é apenas uma conexão com o GitHub. Apesar do Bard estar em fase experimental no Google, ele é bom demais. Em apenas duas consultas, ele mostrou que eu não aprendi nada de Laravel nesses dois últimos anos!
  4. Até agora, eu não tive nenhum problema, depois de atualizar o PHP para 8.2.0, a não ser na hora de executar o Laravel no computador local. Recebi uma estranha mensagem, o de que o Carbon::setLastErros( ) encontrou coisa que ele não esperava. No Google, achei a solução nesse tópico: php - Laravel Carbon\Carbon::setLastErrors() - Stack Overflow, resumindo basta executar o comando composer update.
  5. Achei estranho o VS Code reclamar que a função view ou redirect não está definido dentro de um código que usa a gramática do Laravel. No Google, achei uma solução que funciona. É demorado, mas funciona: ctrl + ship + p -> Index Workspace
  6. Já tem algumas horas que eu estou batendo cabeça nessa situação, e não consegui... Seguinte, tenho dois selects que serão preenchidos com opções do banco de dados, um de categoria e outro de afiliação: adicionar-produto.blade.php <div class="input-group mb-3"> <label class="input-group-text" for="categoria">Categoria</label> <select class="form-select" id="categoria" data-parsley-required="true" name="categoriaProdutoID"> <option disabled selected>Escolha uma...</option> <option value="1">One</option> <option value="2">Two</option> <option value="3">Three</option> </select> </div> <div class="input-group mb-3"> <label class="input-group-text" for="afiliacao">Afiliação</label> <select class="form-select" id="afiliacao" data-parsley-required="true" name="afiliacaoID"> <option disabled selected>Escolha uma...</option> @foreach ($afiliados as $afiliado) <option value="{{ $afiliado->afiliacaoID }}">{{ $afiliado->nomeAfiliacao }}</option> @endforeach </select> </div> No segundo eu já fiz ele para fazer a iteração, criei o controller e model, porém o Laravel me retorna com o erro de variável não definida. Já tentei fazer com ->with('afiliados', $afiliados), mas o Laravel diz que não existe essa variável. A situação tá assim: AfiliadoController.php (Controller) class AfiliadoController extends Controller { public function todosAfiliados(){ $afiliados = Afiliado::all(); return view('produtos.adicionar')->with('afiliados', $afiliados); } } Afiliado.php (Model) class Afiliado extends Model { use HasFactory; } Nota: Eu tenho uma página chamada adicionar.blade.php e ela é estendida através de um @include('components/adicionar-produto'), onde lá está o formulário que vai receber o foreach, da seguinte forma... <section class="section"> <div class="card"> <div class="card-body"> <p class="text-subtitle text-muted">Nesta página você poderá um novo produto a listagem de produtos disponíveis no site.</p> @include('components/adicionar-produto') </div> </div> </section> A minha dúvida é, porque eu não consigo fazer com que o Laravel enxergue a variável mesmo passando ela com ->with()? Aqui está o github do projeto: https://github.com/ElisameAraujo/adminNaturezaCura
  7. Eu tenho um arquivo blade_A e outro blade_b. Ambos usam a function._c. Para a function_c voltar para quem chamou, estou pensando em usar a variável session. No blade_a, eu teria algo parecido como session('endereço')=blade_a, e na function_c eu teria um comando assim: voltar para session('endereço'). Como sou novato no Laravel, a minha dúvida é saber se existe solução melhor.
  8. Já faz mais de um ano que estou com o Laravel básico. Agora, avancei mais um passo: instalei o componente Breezer, agora eu tenho uma rotina de autenticação, mais comandos no Blade, uma barra de navegação e o TailwindCSS. O problema é que estou apanhando muito para criar um modal. Hoje achei esse tutorial: How To Make a Modal Box With CSS and JavaScript (w3schools.com) - esse tutorial é super bacana, eu gostei muito dele. Ele não funciona no Laravel, pois ele não usa a gramática do TailwindCSS. Consultei o dicionário do Tailwind para saber como se fala "cor" e "esconder" na gramática dele, e assim consegui adaptar o código: lcto.blade.php <x-app-layout> <button onclick=myModal.className='bg-red-600'>Open Modal</button> <div id=myModal class='hidden' onclick=this.className='hidden'> <div> <p>Some text in the Modal..</p> </div> </div> </x-app-layout> <x-app-layout> é da gramática do Blade, ele pede para incluir o código dentro de uma outra página criada pelo app.php.
  9. O meu conhecimento em HTML é precário, mas encontrei no projeto Laravel Chirps um arquivo chamado navigation.blade.php, nele eu encontrei o marcador <nav>. Para mim <nav> ou <div> é a mesma coisa, pois eu não sei nada de HTML. No entanto, ele aparece no topo da página do navegador. Eu clico "Dashboard", e ele apresenta o conteúdo do Dashboard. Eu clico "Chirps", e ele apresenta o conteúdo do Chirps. Só que a barra permanece no topo da página. Eu gostei desse recurso, mas fiquei imaginando se era possível acrescentar mais uma linha na barra de navegação. Esse é o meu primeiro teste. Se você perceber que estou fazendo coisa errada, por favor me alerte. <nav> <div>linha de cima</div> <div id=em_baixo>linha de baixo</div> <hr> </nav> <script> function teste(){em_baixo.innerHTML='<input>'} </script> <input type=submit onclick=teste()>
  10. Em 2020 eu gastei quase dois meses para conseguir conectar o celular no PHP. Foi bem difícil mexer no Apache. No notebook bastava escrever "localhost" e no celular "192.168.0.12" que é o IP do Notebook. Agora em 2023 eu uso o Laravel no notebook assim: "localhost:8000". E hoje eu tive a curiosidade de entrar pelo celular, assim: 192.168.0.12:8000, mas o meu acesso foi negado. A minha primeira reação foi entrar em pânico, eu tenho pavor do Apache. Então eu criei a porta 8000 no Firewall do Windows, mas não deu certo. Então, eu fui buscar a solução no Google, e em menos de meia hora eu encontrei a solução: Não preciso mexer no Apache, graças a Deus! A solução está no próprio Laravel. Ao invés de escrever "php artisan serve", agora preciso escrever "php artisan serve --host 192.168.0.12 --port 8000".
  11. Eu fiz uma grande besteira e assim eu perdi o meu acesso ao projeto Chirp, o primeiro projeto que aparece no tutorial do Laravel. A única solução que eu encontrei foi começar do zero para descobrir qual foi a besteira que eu fiz. A primeira etapa é criar um projeto vazio, mas ele não é nada vazio. A página Welcome já traz embutido o Tailwind CSS. A segunda etapa é a instalação do componente Breezer do Laravel, ele define a rotina de bloqueio e autenticação do usuário. Nessa etapa, o editor VS Code encontrou dois problemas nessa linha: style="display: {{ $show ? 'block' : 'none' }}" O CS Code disse "property value expected" e "at-rule or selector expected". Procurei a solução do problema no Google, mas nada funcionou. Tentei executar o modal.blade.php, criando uma rota para ele, mas eu não consegui enxergar coisa alguma. Tudo o que eu sei é que esse arquivo é executado dentro da rotina da conta do usuário, onde ele redefine ou elimina a conta. Enfim, só sobrou a contemplação. Quem usa essa gramática de definir o estilo no meio do caminho era somente eu. Mas desconfio que eu não sou o único. Desconfio que isso é coisa do Tailwind CSS, mas não posso provar porque eu não consegui instalar o CSS no meu notebook. E assim, o meu estudo do Laravel fica comprometido, porque eu também não sei nada sobre o Tailwind CSS. Em seguida faço a listagem de todo o arquivo modal.blade.php e que o Laravel coloca junto com o app.blade.php onde tem o comando <!DOCTYPE html>: @props([ 'name', 'show' => false, 'maxWidth' => '2xl' ]) @php $maxWidth = [ 'sm' => 'sm:max-w-sm', 'md' => 'sm:max-w-md', 'lg' => 'sm:max-w-lg', 'xl' => 'sm:max-w-xl', '2xl' => 'sm:max-w-2xl', ][$maxWidth]; @endphp <div x-data="{ show: @js($show), focusables() { // All focusable element types... let selector = 'a, button, input:not([type=\'hidden\']), textarea, select, details, [tabindex]:not([tabindex=\'-1\'])' return [...$el.querySelectorAll(selector)] // All non-disabled elements... .filter(el => ! el.hasAttribute('disabled')) }, firstFocusable() { return this.focusables()[0] }, lastFocusable() { return this.focusables().slice(-1)[0] }, nextFocusable() { return this.focusables()[this.nextFocusableIndex()] || this.firstFocusable() }, prevFocusable() { return this.focusables()[this.prevFocusableIndex()] || this.lastFocusable() }, nextFocusableIndex() { return (this.focusables().indexOf(document.activeElement) + 1) % (this.focusables().length + 1) }, prevFocusableIndex() { return Math.max(0, this.focusables().indexOf(document.activeElement)) -1 }, }" x-init="$watch('show', value => { if (value) { document.body.classList.add('overflow-y-hidden'); {{ $attributes->has('focusable') ? 'setTimeout(() => firstFocusable().focus(), 100)' : '' }} } else { document.body.classList.remove('overflow-y-hidden'); } })" x-on:open-modal.window="$event.detail == '{{ $name }}' ? show = true : null" x-on:close.stop="show = false" x-on:keydown.escape.window="show = false" x-on:keydown.tab.prevent="$event.shiftKey || nextFocusable().focus()" x-on:keydown.shift.tab.prevent="prevFocusable().focus()" x-show="show" class="fixed inset-0 overflow-y-auto px-4 py-6 sm:px-0 z-50" style="display: {{ $show ? 'block' : 'none' }}" > <div x-show="show" class="fixed inset-0 transform transition-all" x-on:click="show = false" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" > <div class="absolute inset-0 bg-gray-500 opacity-75"></div> </div> <div x-show="show" class="mb-6 bg-white rounded-lg overflow-hidden shadow-xl transform transition-all sm:w-full {{ $maxWidth }} sm:mx-auto" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" x-transition:enter-end="opacity-100 translate-y-0 sm:scale-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100 translate-y-0 sm:scale-100" x-transition:leave-end="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" > {{ $slot }} </div> </div>
  12. Instalando Tailwind CSS via NPM e alterando suas propriedades CSS com theme | Blog TreinaWeb - esse é o endereço que me ajudou a instalar o Tailwind no meu notebook. Existe um tutorial também na página oficial do Tailwind, mas enfrentei um monte de mensagens de erro, e eu não sabia para onde ir, já esse tutorial deixou o meu notebook redondo. Nos primeiros testes que eu fiz, notei que as minhas gambiarras não funcionam mais, do tipo <div style:'width:500;margin:0 auto'>. Ou seja, a minha fase de improvisação com o Bootstrap chegou no fim. Esse é o preço que tenho que pagar para poder estudar o Laravel e instalar um facilitador do tipo Livewire.
  13. Hoje precisei dar uma olhada no manual do Laravel para ver se havia a possibilidade de fazer uma consulta agrupamento e uma consulta seleção ao mesmo tempo para a mesma tabela. Isso é possível sim, o problema é que o campo que precisava agrupar estava no formato yyyy-mm-dd h:i. Para mudar o formato no meio de uma consulta, isso é bem complicado, assim estou pensando em mudar o campo em duas partes, um campo para date e outro para time, claro que isso é um desperdício de recurso. Outra alternativa é eu "injetar" a gramática do PHP no Laravel, ou seja, vou pedir para fazer uma consulta no Controller e outra no Blade. Isso também é desperdício de recurso. Mas no manual eu consegui encontrar um tópico interessante. Eu pensei que os campos created_at e updated_at eram obrigatórios para trabalhar com o motor do Eloquent, e assim eu criei esses dois campos em várias tabelas para continuar com o meu estudo no Laravel. Só que eu nunca usei esses campos, eu só tenho dois usuários usando o meu projeto, eu não preciso de tanto detalhe na tabela para trabalhar. A dica é pedir para o Eloquent não trabalhar com esses dois campos, definindo a propriedade $timestamps para false para cada model que você precisa trabalhar. Eloquent: Getting Started - Laravel - The PHP Framework For Web Artisans
  14. Eu tenho a tabela pedidos com datas e o número do pedido. Eu queria agrupar o número dos pedidos por data. Eu fiz uma bela gambiarra, misturando a gramática do Laravel com a gramática do PHP. Funcionou, mas eu pedi ajuda no Laracasts. A solução do Lary é muito mais elegante que a minha. Só que apareceu um outro colaborador, propondo resolver tudo na base das Collections. Os Collections não funcionaram comigo, mas a mensagem do Lary desapareceu. O Lary é a Inteligência Artificial do Laracasts. O problema do Laracasts é que não dá para editar o Post, mas o Lary conseguiu até excluir! Que coisa! Mesmo assim, eu consegui adaptar a sugestão do Lary no meu código que ficou assim: Model tbpedido.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class tbpedido extends Model { use HasFactory; protected $table="tbpedido"; public function details() {return $this->hasMany(tbpedido::class,'dia','dia');} } -------------------------- PedidoController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbpedido; class PedidoController extends Controller { public function group(){ $groups=tbpedido::groupBy('dia')->select('dia')->get(); $details=tbpedido::with('details')->get(); return view('groups',compact('groups','details')); } } ----------------------------- groups.blade.php <table><th>Dia<th>Pedido @foreach($groups as $group) <tr><td>{{$group->dia}} @foreach($group->details as $detail) <td>{{$detail->ped}} @endforeach @endforeach </table> A minha solução também funciona, mas vou morrer de vergonha se eu publicar aqui.
  15. Eu vejo essa mensagem no painel de inspeção do navegador, quando executo esse código: teste.blade.php: <form method=post> @csrf <input name=email><input type=submit> </form> controller: public function teste(Request $request){ if($request->input("email")){ $email=$request->input("email"); dd($email);} return view('teste');} O código funciona, o problema é que eu não sei se posso simplesmente negligenciar a mensagem. De acordo com o Lary Laracasts, o problema é lá no servidor, no meu caso, seria o Hostinger. Como eu só pago R$ 23,00 por mês para hospedar as minhas coisas, não sei se tenho direito a reclamar alguma coisa. The error message "POST https://sample.net/teste/ 500 /teste/:1" indicates that there was a server-side error when attempting to make a POST request to the specified URL. This error is not related to the code provided in the question. To troubleshoot this error, you should check the server logs to see if there are any error messages that can provide more information about the cause of the error. Additionally, you can try making the same POST request using a tool like Postman to see if the error is specific to the code or if it is a server-side issue. As for the code provided, it appears to be functioning correctly. The form is submitting a POST request to the "teste" method in the controller, which is then retrieving the "email" input value and displaying it using the dd() function. If you want to display the email value on the page instead of using dd(), you can modify the controller code as follows: public function teste(Request $request){ $email = $request->input("email"); return view('teste', ['email' => $email]); } Then, in the teste.blade.php file, you can display the email value using: @if(isset($email)) <p>Email: {{ $email }}</p> @endif
  16. Frank K Hosaka

    A classe

    Finalmente, eu consegui terminar a tradução do meu projeto em PHP para Laravel. Tudo o que eu precisava era criar uma classe no Laravel. O Laravel não permite criar uma classe dentro de outra classe. Eu tentei colocar num arquivo chamado Helpers.php, mas o Laravel não aceitou. O único jeito foi criar um controller, assim: php artisan make:controller vr Eu queria chamar a minha classe de var, mas o Laravel também não deixa. A seguir a listagem da classe vr, o controller do orçamento e seu respectivo blade: vr.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class vr extends Controller { public $ped; public $diaped; public $totalped; public $codp; public $pessoa; public $end; public $cnpj; public $tel; public $nota; public $codprod; public $prod; public $un; public $preço; public function getPed(){return $this->ped;} public function getDiaped(){return $this->diaped;} public function getTotalPed(){return $this->totalped;} public function getCodp(){return $this->codp;} public function getPessoa(){return $this->pessoa;} public function getEnd(){return $this->end;} public function getCNPJ(){return $this->cnpj;} public function getTel(){return $this->tel;} public function getNota(){return $this->nota;} public function getCodprod(){return $this->codprod;} public function getProd(){return $this->prod;} public function getUn(){return $this->un;} public function getPreco(){return $this->preço;} } ------------------------------------------------------------------ OrcamentoController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbsupervariavel; use App\Models\tbpedido; use App\Models\tbpessoa; use App\Models\vw_histped; use App\Models\tbprod; use App\Models\tbhistped; use Auth; class OrcamentoController extends Controller { public function orcamento(request $request){ $vr=new vr(); if($request->input('qt')){ $qt=$request->input('qt'); if($qt!=0){ $qt=fmt($qt); $texto=$request->input('texto'); $vetor=explode(",",$texto); $preço=$vetor[0]; $codprod=tbsupervariavel::where('codsuper',Auth::id())->value('codprod'); $ped=$vetor[1]; $un=$vetor[2]; $subtotal=$qt*$preço; tbhistped::create(['ped'=>$ped,'codprod'=>$codprod,'un'=>$un,'unitario'=>$preço,'subtotal'=>$subtotal,'qt'=>$qt]); $total=tbhistped::where('ped',$ped)->sum('subtotal'); tbpedido::where('ped',$ped)->update(['total'=>$total]);}} if($request->input('excluir')){ $id=$request->input('excluir'); $ped=$request->input('pedido'); tbhistped::destroy($id); $total=tbhistped::where('ped',$ped)->sum('subtotal'); tbpedido::where('ped',$ped)->update(['total'=>$total]);} if($request->input('produto')){ $produto=$request->input('produto'); $tamanho=strlen($produto); $posicao=strpos($produto,":"); $vr->codprod=substr($produto,$posicao+1,$tamanho-$posicao); tbsupervariavel::where('codsuper',Auth::id())->update(['codprod'=>$vr->codprod]); $produto=tbprod::where('codprod',$vr->codprod)->first(); $vr->prod=$produto->prod; $vr->un=$produto->un; $vr->preço=pvenda($produto->custo,$produto->marg);} if($request->input('anterior')){ $ped=$request->input('anterior'); if($ped>0){$ped--;} tbsupervariavel::where('codsuper',Auth::id())->update(['ped'=>$ped]);} if($request->input('novo')){ $pedido=tbpedido::orderBy('ped','desc')->first(); if($pedido->total!=0){ $pedido->ped++; tbpedido::create(['ped'=>$pedido->ped,'dia'=>now()]);} tbsupervariavel::where('codsuper',Auth::id())->update(['ped'=>$pedido->ped]);} tbsupervariavel::where('codsuper',Auth::id())->update(['end'=>'orcamento']); $vr->ped=tbsupervariavel::where('codsuper',Auth::id())->value('ped'); $vr->diaped=tbpedido::where('ped',$vr->ped)->value('dia'); $vr->totalped=tbpedido::where('ped',$vr->ped)->value('total'); $vr->codp=tbpedido::where('ped',$vr->ped)->value('codp'); if($vr->codp){ $pessoa=tbpessoa::where('codp',$vr->codp)->first(); $vr->pessoa=$pessoa->pessoa; $vr->end=$pessoa->end; $vr->cnpj=$pessoa->cnpj; $vr->tel=$pessoa->tel; $vr->nota=$pessoa->nota;} $histped=vw_histped::where('ped',$vr->ped)->get(); $prod=tbprod::orderBy('prod')->get(); return view('orcamento',compact('vr','histped','prod'));} } --------------------------------------------------------------------------------- orcamento.blade.php @include('menu') <script>document.title="Orçamento" btmenu.innerHTML='Barraca do Frank<br>Esquina da Magazine Luiza' </script> <div><table class='table table-striped'> <td><form><input type='submit' value='anterior'><input type='hidden' name='anterior' value={{$vr->ped}}></form> <td style=color:red>Pedido {{$vr->ped}} de {{dbr($vr->diaped)}} <td><form><input type='submit' value='novo'><input type='hidden' name='novo' value='novo'></form></table> <div><table class='table table-striped linha2'><th>Produto<th style=text-align:right>Qt<th>Un<th>Preço<th>Total @foreach($histped as $item) <tr> <td nowrap>{{$item->prod}} <td align=right> @if($item->qt==intval($item->qt)) {{$item->qt}} @else {{dec($item->qt)}} @endif <td><a href=?excluir={{$item->id}}&pedido={{$item->ped}}>{{$item->un}}</a> <td align=right>{{dec($item->unitario)}} <td align=right>{{dec($item->subtotal)}} @endforeach <tr> @if(!isset($_GET['produto'])) <td> <form> <input list=lsproduto name=produto placeholder=produto onchange=submit() size=40> <datalist id='lsproduto'> @foreach($prod as $pr) <option value='{{$pr->prod}} :{{$pr->codprod}}'> @endforeach </datalist> </form> @else <td>{{$vr->prod}} @endif @if(!isset($_GET['qt'])) <td align=right> <form> <input id=qt name=qt onchange=submit() size=1 placeholder=qt autofocus> <input type=hidden name=texto value="{{fmt($vr->preço)}},{{$vr->ped}},{{$vr->un}}"> </form> <td>{{$vr->un}}<td>{{$vr->preço}} @endif <tr><td> @if(empty($vr->codp)) <a href=pessoa>Selecione um cliente</a> @else <details> <summary><b>{{$vr->pessoa}}</b></summary> Endereço <b>{{$vr->end}}</b> <br> CNPJ <b>{{$vr->cnpj}}</b> <br> Telefone <b>{{$vr->tel}}</b> <br> Nota <b>{{$vr->nota}}</b> <br> <a href=pessoa>Mudar cliente</a> <br> <a href="pessoa?busca={{$vr->pessoa}}">Atualizar cliente</a> </details> @endif <td><td><td><td><b>{{dec($vr->totalped)}} </table> </div> O único problema desse código é que ele usa o método GET, o que deixa um monte de comandos na barra de navegação. Ou seja, se você atualizar o navegador, ele vai incluir o mesmo produto tantas vezes quanto você atualizar a tela do navegador. Para contornar isso, o pessoal recomenda usar o método POST, mas aí você não consegue enxergar coisa alguma na barra de navegação. Isso é um dilema difícil de resolver.
  17. Hoje eu encontrei uma dica nessa página php - Laravel filter a value in all columns - Stack Overflow, e eu criei esse método na classe PessoaController: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbpessoa; use Schema; class PessoaController extends Controller{ public function pessoa(Request $request){ if($request->input('busca')){ if(($request->input('busca'))[0]=="@"){ $busca=$request->input('busca'); $tamanho=strlen($busca); $busca=substr($busca,1,$tamanho-1); $query=tbpessoa::query(); $columns=Schema::getColumnListing('tbpessoa'); foreach($columns as $column){ $query->orWhere($column,'like','%'.$busca.'%');} $pessoas=$query->get(); return view('pessoa',compact('pessoas'));}} }
  18. Eu gosto bastante do Hostinger, ele me cobra R$ 23,00 por mês e assim consigo hospedar nele o meu banco de dados e 14 códigos em PHP. A conexão é estável, bem melhor que o meu notebook, que não é um servidor e usa o ngrok e a Claro, e só funciona quando não preciso. Mas ontem eu queria me aventurar mais, eu queria ver se era possível instalar o Laravel 10. O projeto inicial do Laravel vem com 9.000 arquivos e para arrumar tudo isso são necessários dois programas: o Composer e npm. Não é fácil usar esses programas no notebook, e muito menos na hospedagem. Apanhei muito para instalar o Composer no Hostinger. Já o npm foi bem mais difícil, mas no final do dia eu encontrei um tutorial: How to host a Node.js app on shared host | by Mayomi Ayandiran | Medium. Tentei ver os vídeos do YouTube bem como eu vi o manual do Laravel, mas eu não consegui aprender nada. Assim, usei o famoso método da tentativa e erro. Primeiro, eu zipei um Laravel 10 que tinha no meu notebook, e mandei o zip para o Hostinger, e lá descompactei. Na hora de entrar no projeto, eu recebi a mensagem 403, ou seja, eu não tenho autorização para entrar. Para resolver esse problema, eu fiquei imaginando se o PHP e o Laravel não é a mesma coisa. Então eu criei um arquivo chamado index.php com o comando echo "olá mundo!", e assim consegui entrar na pasta onde estava o Laravel, mas essa gambiarra não funcionou para entrar no Laravel. Então, eu decidi jogar o projeto fora, como eu faço no meu notebook. Mas no Hostinger, as coisas são diferentes. O Hostinger perguntou se eu tinha certeza que eu queria jogar o projeto fora, eu respondi sim, mas para a minha surpresa o Hostinger também jogou fora o banco de dados que estava vinculado no projeto. Esse é o grande problema do método da tentativa e erro, a gente só aprende depois de muita surra.
  19. Tentei usar o route::resource que aparece no projeto Chirps (mencionado no começo do manual oficial do Laravel 10), mas não deu certo. Depois de conferir várias vezes, eu não tive outra escolha senão pedir ajuda no Laracasts, assim: My route::resource doesn't work // web.php Route::resource('venda',VendaController::class); // controllers class VendaController extends Controller{ public function index():View{ return view('venda'); } public function store(Request $request):RedirectResponse{ return "olá mundo";} } // venda.blade.php <form action="{{route('venda.store')}}"> @csrf <input name=teste> </form> Em menos de cinco minutos veio a resposta do Lary: The issue with the code is that the store method in the VendaController is returning a string instead of a RedirectResponse object. To fix this, change the return statement in the store method to: return redirect()->route('venda.index'); This will redirect the user to the index method of the VendaController after submitting the form. Also, make sure that the venda.blade.php file is saved in the resources/views directory. Here's the updated code: // web.php Route::resource('venda', VendaController::class); // controllers class VendaController extends Controller { public function index(): View { return view('venda'); } public function store(Request $request): RedirectResponse { // Process the form data here return redirect()->route('venda.index'); } } // venda.blade.php <form action="{{ route('venda.store') }}" method="POST"> @csrf <input name="teste"> <button type="submit">Submit</button> </form> Ou seja, eu não posso usar o método GET, quando trabalhar com o route::resource.
  20. Eu tentei atualizar o cadastro do cliente, mas eu logo vi que eu não tinha feito essa rotina no Laravel, o que eu tinha era apenas a tela de consulta. Mas eu lembrei do projeto Chirp (ele está no primeiro parágrafo do manual oficial do Laravel 10), ele pega todos os dados do formulário e manda diretamente no banco de dados. Eu queria copiar a ideia. Tudo o que eu precisava era mandar todos os dados do cliente no formato <input name=pessoa value={{$pessoa->pessoa}} readonly style=border:none>. Mas na hora de submeter o formulário, absolutamente nada foi encaminhado adiante. Eu precisava tirar o atributo readonly do input. Ou seja, qualquer um pode alterar os dados do cliente logo na tela de consulta. Mas como só eu mexo nesse programa, acabei gostando da solução. O código parcial do Laravel ficou assim: pessoa.blade.php @include('menu') <script>btmenu.innerHTML='Pessoa'</script> <div> <form> <table class='table table-striped'><tr><th>Busca<th align=left> <input name=busca onchange=submit() autofocus> <script>busca1.focus()</script> <tr><td><td><i>Para procurar em todos os campos use @</i> </form> @foreach($pessoas as $pessoa) <tr><td align=right><a href='?codp={{$pessoa->codp}}&pessoa={{$pessoa->pessoa}}'>{{$pessoa->codp}}</a> <td><details> <summary> <form> <b><input name=pessoa value='{{$pessoa->pessoa}}' style=border:none size=50></b></summary> Endereço:<b><input name=end value='{{$pessoa->end}}' style=border:none size=50></b> <br>CNPJ CPF: <b><input name=cnpj value='{{$pessoa->cnpj}}' style=border:none size=50></b> <br>Telefone:<b> <input name=tel value='{{$pessoa->tel}}' style=border:none size=50></b> <br>Nota:<b><input name=nota value='{{$pessoa->nota}}' style=border:none size=50></b> <br><input type=hidden name=codp value={{$pessoa->codp}}> <input name=updated_at value='{{date('Y-m-d H:i:s')}}' onclick=submit() style=border:none> </form> </details> @endforeach </table></div> DiarioController.php <?php public function pessoa(Request $request){ if($request->input('updated_at')){ $codp=$request->input('codp'); tbpessoa::where('codp',$codp)->update($request->toArray()); return redirect('orcamento');}
  21. No meu projeto Laravel eu criei o arquivo menu.blade.php. Para chamar arquivo menu.blade.hp dentro do outro arquivo tipo pagar.blade.php, eu usei o comando @include('menu'). No projeto Chirps que aparece no manual oficial do Laravel 10, no entanto, ele usa outra tecnologia: <x-app-layout> </x-app-layout>, ele está amarrado no arquivo views\layout\app.blade.php, e dentro desse arquivo tem um comando reservado para incluir um novo HTML, ele é chamado de {{$slot}}. Eu não vejo nenhuma necessidade de usar essa tecnologia, mas ela é interessante. A solução mais simples é copiar todo o conteúdo do arquivo views\menu.blade.php no arquivo views\layout\app.blade.php e no final acrescentar o comando {{$slot}}. O chato é que eu vou precisar colocar marcador <x-app-layout> </x-app-layout> em todos os demais arquivos que se reportavam ao menu.blade.php. A Lei do Menor Esforço me orienta a não mexer no meu projeto, mas nada impede de eu fazer um teste. Encontrei um outro tutorial no Google informando que eu preciso usar o comando php artisan make:components teste. Ele cria o arquivo views\components\teste.blade.php. Dentro dele, criei o seguinte código: olá mundo 1 <div> {{$slot}} </div> olá mundo 2 Dentro da pasta views, eu criei o arquivo teste2.blade.php <x-teste> teste2 </x-teste> Para eu poder chamar o arquivo teste2 na barra do navegador, eu acrescentei esse código no arquivo routes/web.php: Route::view('teste2','teste2'); Note que 'teste2' aparace duas vezes, o primeiro é o comando que você vai usar no navegador: localhost:8000/teste2 e o segundo é o nome do arquivo que o Laravel vai ter que abrir e mostrar no navegador, assim:
  22. Depois de quase um ano, eu consegui transformar o meu projeto em PHP em Laravel. Ele funciona do jeito que eu quero, mas isso não quer dizer que o projeto Laravel esteja correto. Assim, eu tomei a iniciativa de tentar estudar o Laravel 10.x no site oficial, eu ainda estou preso no primeiro parágrafo. Ele ensina a criar o projeto Chirps para quem não está familiarizado com o Laravel. Como ele está em inglês, eu fui tentando entender na base da tentativa e erro. Eu tive que jogar fora quatro vezes o projeto, pois eu só recebia mensagens de erro. Quando usei o Laravel nesse último ano, eu só usei um terminal. O projeto Chirps pede para você trabalhar com três terminais! Um terminal é para ativar o php artisan serve. Outro terminal é para ativar npm run dev. E finalmente outro terminal é para mexer nos códigos. No ano passado, eu vi o npm run dev, mas não sabia para que servia, e eu deixei ele de lado. Mas dessa vez, acabei gostando desse comando, o projeto Chirps mostra a grande mágica do Laravel com a ferramenta npm run dev, ele atualiza no navegador para qualquer alteração que você faz no código em tempo real. Logo adiante, o projeto Chirps pede para você abrir mais um terminal: php artisan tinker. Você digita coisa do tipo Chirp::all( ); e ele mostra o que tem dentro dessa tabela, mas no meu caso apareceu duas vezes a mensagem de erro de que não foi encontrado a classe "Chirp". Ao invés de começar do zero, eu pedi ajuda para o Laracasts e o Lary me respondeu em menos de cinco minutos para eu usar o comando composer dump-autoload. Enfim, em dois dias já consegui chegar no segundo parágrafo do projeto Chirps, e já vi dezenas de ferramentas que eu nunca usei no meu projeto. Ainda faltam mais trinta parágrafos para chegar até o final e assim conseguir o meu diploma de iniciante.
  23. No meu projeto PHP eu usei o comando insert into para adicionar um novo registro na tabela tbcontacorrente, baseado na tbdiario. Ele funcionou sem nenhum problema. Já a gramática do Eloquent é bem diferente, ele usa o comando Create, o problema é que não achei nenhum tutorial de como usar o Create tendo como base outra tabela. A solução que eu encontrei foi o de criar um array da tabela tbdiário e outro array para a tabela tbcontacorrente, e criar um novo registro na gramática do Eloquent baseado na diferença dos arrays. Se alguém tiver uma solução melhor (na gramática do Eloquent), eu aguardo. A minha solução ficou assim (ele funciona, isso não quer dizer que esteja correto): <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbcontacorrente; use App\Models\tbdiario; class DiarioController extends Controller { public function pagar(Request $request){ $doctos=tbdiario::select('docto')->where('contad',130)->orWhere('contad',211) ->orWhere('contac',130)->orWhere('contac',211)->get()->toArray(); $pendencias = tbcontacorrente::select('docto')->get()->toArray(); $a=[]; foreach($doctos as $key=>$value){$a[]=$value['docto'];} $b=[]; foreach($pendencias as $key=>$value){$b[]=$value['docto'];} $difs=array_diff($a,$b); foreach($difs as $dif){ tbcontacorrente::create(['docto'=>$dif]);} } }
  24. Para eu conseguir o período de apuração no MySQL montei o seguinte view: CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `vw_apuracao` AS SELECT DATE_FORMAT(`tbdiario`.`dia`, '%Y-%m') AS `apuracao` FROM `tbdiario` GROUP BY YEAR(`tbdiario`.`dia`) , MONTH(`tbdiario`.`dia`) ORDER BY `apuracao` DESC O problema é que o Laravel não aceita esse recurso, assim eu crei uma nova consulta dentro do Controller, assim <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbdiario; class DiarioController extends Controller { public function balancete(Request $requery){ if($requery->input('apuracao')){ $apuracao=tbdiario::orderBy('dia','desc')->get()->groupBy(function($data){ return \Carbon\Carbon::parse($data->dia)->format('Y-m');}); return view('apuracao',compact('apuracao'));}}} O problema é que o resultado de $apuração não é apenas as apurações, mas toda a tabela tbdiario, onde as apurações aparecem como chave. O nome disso é Collections, eu acredito que é o mesmo conceito do JavaScript, quando a gente tenta ver o conteúdo de um elemento HTML através do console.log( ). Assim, usei essa sintaxe para montar o apuração.blade.php: <div style="width:25%;margin:0 auto"> <form> <table> @foreach($apuracao as $key=>$valor) <td nowrap><button name=apuracao value={{$key}}>{{$key}}</button> @php $mes=substr($key,5,2) @endphp @if($mes=="01" || $mes=="07") <tr> @endif @endforeach </form></div> Ou seja, o Laravel é como o HTML, o Javascript e o PHP. É só alegria, quando funciona.
  25. Eu comecei a estudar o MySQL em 2020, depois de três anos é que eu consegui montar o balancete na forma de um view, e chamei de view_balancete. O PHP local, o PHP do servidor e o Laravel local conseguem trabalhar com o view_balancete. Já o Laravel do servidor apresenta mensagem de erro SQLSTATE[42000]: Syntax error or access violation: 1055 'u99999999_Hostinger.tbconta.descricao' isn't in GROUP BY No Google existem várias dicas que batem na mesma tecla, orientando a mudar a variável strict do sistema MySQL, a mais recorrente é essa: In config\database.php --> "mysql" array Set 'strict' => false to disable all. Eu não tenho a menor ideia de como mexer no ambiente de sistema do MySQL tanto no meu notebook bem como lá no servidor Hostinger. A minha saída foi montar o balancete no Laravel: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbconta; use App\Models\tbdiario; use App\Models\tbsupervariavel; Use Auth; class productController extends Controller{ public function teste(){ $balancete=[]; $contas=tbconta::get(); $primeirodia=tbsupervariavel::where('codsuper',Auth::id())->value('primeirodia'); $ultimodia=tbsupervariavel::where('codsuper',Auth::id())->value('ultimodia'); foreach($contas as $conta){ $debitoAnt=tbdiario::where('contad',$conta->conta) ->where('dia','<',$primeirodia)->sum('valor'); $creditoAnt=tbdiario::where('contac',$conta->conta) ->where('dia','<',$primeirodia)->sum('valor'); $inicio=$debitoAnt-$creditoAnt; $debitoFim=tbdiario::where('contad',$conta->conta) ->where('dia','<=',$ultimodia)->sum('valor'); $creditoFim=tbdiario::where('contac',$conta->conta) ->where('dia','<=',$ultimodia)->sum('valor'); $fim=$debitoFim-$creditoFim; $debito=tbdiario::where('contad',$conta->conta) ->whereBetween('dia',[$primeirodia,$ultimodia])->sum('valor'); $credito=tbdiario::where('contac',$conta->conta) ->whereBetween('dia',[$primeirodia,$ultimodia])->sum('valor'); array_push($balancete,[$conta->conta,$conta->descricao,$inicio,$debito,$credito,$fim]);} dd($balancete);} }
×
×
  • Criar Novo...