0

アプリを作成しており、ユーザーにワンクリック インストール機能を提供する予定です。アイデアは、アプリケーションが最初に起動されたときに、ユーザーがデータベースの詳細 (ホスト名、データベース名、ユーザー名とパスワード) を入力し、ユーザーの詳細 (電子メール、デフォルト管理者のユーザー名とパスワード) を入力する、インストール/構成画面のようなフォームを表示することです。アカウント)。彼がフォームを送信したら、次のタスクを実行したいと思います。

  1. ホスト名、データベース名、ユーザー名、およびパスワードで .env ファイルを更新します
  2. すべての移行を実行する
  3. すべての db:seeds を実行します
  4. ユーザー入力に基づいてユーザーを作成します (これは大きな問題ではありません)。

コード経由で行うことは可能ですか?これをグーグルで検索しようとしましたが、助けが見つかりません。

タイトルが示すように、このプロジェクトでは L5.2 を使用しています。

4

2 に答える 2

2

コードを使用してすべてを実行できます;)

コードから呼び出す sh スクリプトを作成することも、コードから直接実行することもできます。

  1. .env ファイルをコピーして入力する関数は見たことがありませんが、.env.example を使用して読み取りfile_get_contents()、コンテンツを更新してから、新しいファイルをディスクに書き戻すことができます。
  2. \Illuminate\Support\Facades\Artisan::call('migrate');
  3. \Illuminate\Support\Facades\Artisan::call('db:seed');(使用可能なテストからのみこれを行ったため、テストされていません$this->seed();
  4. User::create(['column', => $value])
于 2016-06-20T11:25:10.297 に答える
2

したがって、これをいじった後の最終的な解決策は次のとおりです。

私のコントローラー:

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ファイルを作成しています。その後、すべての移行とシードを実行しました。

注:APP_KEY愚かなエラー のため、手動で設定する必要がありました サポートされている暗号化が見つかりません. 暗号および/またはキーの長さが無効です。

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

これが他の誰かを助けることを願っています。:) @rypskar の支援に感謝します。

于 2016-06-21T10:00:17.563 に答える