Photo by Somya Dinkar from [Pexels]
Bem, a primeira coisa é que Laravel é escrito em PHP, portanto as mudanças são mais na forma de organização ou estrutura do Laravel do que qualquer outra coisa.
Programar é algo tão belo! Certo dia vi uma pergunta no twitter mais ou menos assim: "você continuaria programando mesmo que isso não te rendesse grana?!". A minha resposta na hora foi: Com certeza! Conheci programação por volta de 2010--2011 no Ensino Médio, em um curso básico de HTML, no momento que percebi a grandeza disso tudo (e olha que era somente HTML), eu me apaixonei! ❤
Por ter uma certa curiosidade de como as coisas funcionam, sempre me dediquei a "criar" coisas que já existiam. No início mantinha uma fixação imensa por criar uma rede social do zero, inclusive quando finalizei o meu curso de HTML na escola, precisava criar uma página web demostrando os meus conhecimentos. A primeira coisa que me veio em mente foi criar uma rede social, vocês já devem imaginar que tentativa falha, não é mesmo? kk Sabia somente HTML, e bem básico, mas achei que poderia criar uma rede social. Acabei entregando três arquivos: pagina-inicial-vermelha.htm, pagina-inicial-verde.html, pagina-inicial-blue.html. Sim! Dentro de cada body eu coloquei o atributo: bgcolor="blue". Nem sei se existe esse atributo mais!
Chega de falar de mim, vamos pro código!
Motivos
Nem todo sistema precisa de um framework!
Vamos deixar isso bem claro! A minha intenção aqui, principalmente se você é um iniciante, não é dizer que todo sistema que você for desenvolver vai precisar de um framework. Porém, contudo, todavia, há momentos em que utilizar um framework vai te poupar tempo. E, meus amigos: Tempo é dinheiro!
Digamos que você e sua equipe criaram um framework próprio a uns anos atrás, ou até mesmo você chegou depois que já haviam criado tal código. E agora as coisas estão ficando tão complicadas que você passa horas tentando dar manutenção ou encaixar um feature nova nesse código antigo. Fizeram uma reunião e decidiram migrar todo o código para um framework bastante conhecido pelo mundo PHP: Laravel. E é aqui que esse post entra!
Vamos partir do início
A primeira coisa que você precisa fazer é baixar o código do Laravel. Feito isso, copie todos os diretórios do seu projeto para esse novo. Fique atendo para diretórios e arquivos com o mesmo nome!
Se, por exemplo, vocês utilizam o composer (se não, o trabalho vai ser bem maior), copie as configurações do seu projeto para o composer.json do laravel.
Lembre-se das estruturas dos diretórios! Controllers dentro de: app/Http/Controllers, das models: app/Models. Utilize os comandos: php artisan make:controller HomeController e php artisan make:model NovoModel para gerar as novas classes. Uma coisa que vai te ajudar bastante nesse momento é o comando: "Substituir em arquivos". No PHP Storm: é Ctrl + Shift + R, e vscode: Ctrl + Shift + H (no Ubuntu, pelo menos).
Ok, vamos para as views. Suponhamos que as suas views estejam todas organizadas e separadas em diretórios, e ainda mais, que utilizava alguma forma de template aonde o arquivo de template principal (aonde fica o html, body, navbar etc), está separado do conteúdo da página. Vai ser beeem mais fácil para fazer a migração! Crie um arquivo PHP com o seguinte conteúdo:
<?php // pegue todos os arquivos .php dentro do diretório views $files = glob('path/views/*.php'); foreach ($files as $file) { // altere a extensão de .php para .blade.php $newFile = preg_replace('/\.php$/', '.blade.php', $file); rename($file, $newFile);| // $content = file_get_content($newFile); $content = explode("\n", $content); // adicione um espaçamento de quatro linhas a cada início de linha $content = array_map(function ($line) { return " " . $line; }, $content); array_unshift($content, "@extends('layouts.app')\n", "@section('content')"); array_push($content, "@endsection\n"); $content = implode("\n", $content); // adiciona dados do layout do laravel file_put_contents($newFile, $content); }
Com isso os arquivos das views estão configurados! Caso os seus arquivos estejam diferentes, você pode adaptar o script acima. Lembre-se de compartilhar nos comentários, com isso poderá ajudar a outras pessoas!
Migramos os controllers e views, e agora talvez seja a hora mais chatinha: migrar o banco de dados! Pra criar os arquivos talvez você possa testar este código:
<?php $dbname = 'dbname'; $user = 'username'; $password = 'password'; $dbh = new PDO('mysql:host=localhost;dbname='.$dbname, $user, $password); $tables = $dbh->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='{$dbname}'"); foreach($tables as $row) { $name = $row[0]; $class = implode('', array_map('ucwords', explode('_', $name))); $class = "Create{$class}Table"; // $columns = $dbh->prepare("SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{$name}' AND TABLE_SCHEMA='{$dbname}'"); $columns->execute(); $columns = $columns->fetchAll(); // $content = "<?php\n\n"; $content .= "use Illuminate\Database\Migrations\Migration\n"; $content .= "use Illuminate\Database\Schema\Blueprint\n"; $content .= "use Illuminate\Support\Facades\Schema;\n\n"; $content .= "class {$class} extends Migration\n{\n"; $content .= " public function up()\n {\n"; $content .= " Schema::create('{$name}', function (Blueprint \$table) {\n"; $content .= " \$table->id();\n"; foreach ($columns as $column) { $type = $column['DATA_TYPE']; $type = $type==='varchar'? 'string': $type; $type = $type==='int'? 'integer': $type; $columnName = $column['COLUMN_NAME']; $content .= " \$table->{$type}('{$columnName}');\n"; } $content .= " \$table->timestamp();\n"; $content .= " });\n"; $content .= " }\n\n"; $content .= " public function down()\n {\n"; $content .= " Schema::dropIfExists('{$name}');\n"; $content .= " }\n"; $content .= "}\n"; // $date = date('Y_m_d_His'); $filename = "database/migrations/{$date}_create_{$name}_table.php"; file_put_contents($filename, $content); } $dbh = null;
Esse código vai gerar pelo menos a base de uma migration, você só precisa fazer as devidas modificações.
Por fim, talvez você também precise gerar seeds:
<?php $dbname = 'dbname'; $user = 'user'; $password = 'password'; $dbh = new PDO('mysql:host=localhost;dbname='.$dbname, $user, $password); $tables = $dbh->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='{$dbname}'"); foreach($tables as $row) { $name = $row[0]; $class = implode('', array_map('ucwords', explode('_', $name))); $class = "{$class}Seeder"; // $columns = $dbh->prepare("SELECT * FROM {$name}"); $columns->execute(); $columns = $columns->fetchAll(\PDO::FETCH_ASSOC); $columns = array_map(function ($column) { $values = []; foreach ($column as $key => $value) { $values[] = "'{$key}' => '{$value}'"; } $values = implode(", ", $values); return " [{$values}]"; }, $columns); $columns = implode(",\n", $columns); // $content = "<?php\n\n"; $content .= "namespace Database\Seeders;"; $content .= "use Illuminate\Database\Seeder;\n"; $content .= "use Illuminate\Support\Facades\DB;\n\n"; $content .= "class {$class} extends Seeder\n{\n"; $content .= " public function run()\n {\n"; $content .= " DB::table('clientes_tipos')->insert([\n"; $content .= "{$columns}\n"; $content .= " ]);\n"; $content .= " }\n"; $content .= "}\n"; $date = date('Y_m_d_His'); $filename = "database/seeders/{$class}.php"; file_put_contents($filename, $content); } $dbh = null;
É isso! Espero ter ajudado! Até a próxima!
Top comments (0)