0

私はアプリケーションを作成しており、ユーザーにワンクリックインストール機能を提供する予定です。このアイデアは、アプリケーションが最初に起動されたときにフォームを表示することです。ユーザーはデータベースの詳細(ホスト名、db名、ユーザー名&パスワード)を入力し、ユーザーの詳細(電子メール、デフォルトの管理者のパスワード、アカウント)。Laravel 5.2:ユーザー入力による.envファイルの更新とコードによる移行の実行

  1. ホスト名で更新し.envファイル、DB名、ユーザ名&パスワード
  2. を実行し、すべての移行
  3. を実行し、すべてのDB::シーズ
  4. 彼は、フォームを提出するならば、私は次のタスクを実行したいですユーザーの入力に基づいてユーザーを作成する(これはあまり問題ではない)

コードで行うことは可能ですか?私はこれをgoogleにしようとしましたが、助けを見つけることができません。

タイトルによれば、私はこのプロジェクトにL5.2を使用しています。

答えて

1

を使用することが可能であるテストからこれを行っているので、テストされていないこれで遊ん後の最終的なソリューションです。

マイコントローラ:

use Illuminate\Support\Facades\Artisan; 
use Illuminate\Support\Facades\Storage; 

class TestController extends Controller 
{ 
    public function index() { 

     // Values I want to insert 
     $data = [ 
      'APP_KEY'  => str_random(32), 
      'DB_HOST'  => 'localhost', 
      'DB_DATABASE' => 'lara_test', 
      'DB_USERNAME' => 'root', 
      'DB_PASSWORD' => '' 
     ]; 

     // default values of .env.example that I want to change 
     $defaults = ['SomeRandomString', '127.0.0.1', 'homestead', 'homestead', 'secret']; 

     // get contents of .env.example file 
     $content = file_get_contents(base_path() . '/.env.example'); 

     // replace default values with new ones 
     $i = 0; 
     foreach ($data as $key => $value) { 

      $content = str_replace($key.'='.$defaults[$i], $key.'='.$value, $content); 
      $i++; 
     } 

     // Create new .env file 
     Storage::disk('root')->put('.env', $content); 

     // run all migrations 
     Artisan::call('migrate'); 

     // run all db seeds 
     Artisan::call('db:seed'); 

     dd('done'); 

    } 

} 

新しいディスクドライバ:

プロジェクトのルートに新しいファイルを作成するには、私は新しいディスクドライバを作成する必要がありました。私は私のconfig/app.phpファイルに次のコードを追加しました:

'disks' => [ 

    ..... 

    'root' => [ 
     'driver' => 'local', 
     'root' => base_path(), 
    ], 

], 

、これは使用してルートに新しいファイルを作成するために私を有効に:

Storage::disk('root')->put('filename', $content); 

概要:

だから基本的に私が取得しています.env.exampleファイルの内容を変更し、必要な定数の値を変更して、新しい.envファイルを作成します。その後、すべてのマイグレーションとシードを実行しました。

注:私は手動のでNo supported encrypter found. The cipher and/or key length are invalid.私は、コード内のすべてのものをやろうとしておりますので

、ないコマンドによる愚かなエラーのAPP_KEYを設定する必要がありました - 私はArtisan::call('key:generate');を使用してみましたが、いくつかの奇妙な理由のために、それこの問題を解決するためにはうまくいかなかったため、32ビットの長さのランダムな文字列を手動で作成し、APP_KEYと設定する必要がありました。

これは他の人に役立つことを願っています。 :) そして、@rypskarのおかげで助けになりました。

1

すべてがコードを使用して行うことができます;)

あなたは、あなたのコードから呼び出すか、あなたのコードから直接これを行うことができますshスクリプトを書くことができます。

  1. 私はコピーと.envファイルを取り込むための任意の機能を見ていないが、あなたはfile_get_contents()を使用して.env.example読んで、ディスクに新しいファイルを書き込む前にコンテンツを更新することができます。
  2. \Illuminate\Support\Facades\Artisan::call('migrate');
  3. \Illuminate\Support\Facades\Artisan::call('db:seed');(私はだからここ$this->seed();
  4. User::create(['column', => $value])
+0

ヘルプメイトに感謝します。 – Jazzbot

関連する問題