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)