0

저는 앱을 만들고 있으며 사용자에게 한 번의 클릭으로 설치 기능을 제공 할 계획입니다. 아이디어는 응용 프로그램이 처음 시작될 때 양식을 표시하는 것입니다. 사용자가 데이터베이스 세부 정보 (호스트 이름, db 이름, 사용자 이름 & 암호)를 입력하고 사용자 세부 정보 (전자 메일, 기본 관리자의 사용자 이름 및 암호 계정).Laravel 5.2 : .env 파일을 사용자 입력으로 업데이트하고 코드를 통해 마이그레이션을 실행하십시오.

  1. 업데이트 호스트 이름, DB 이름, 사용자 이름 & 비밀번호
  2. 실행하는 모든 마이그레이션
  3. 실행하는 모든 DB와 .env의 파일 : 그가 양식을 제출하면, 나는 다음과 같은 작업을 수행 할 씨앗을
  4. 사용자 입력을 기반으로 사용자 만들기 (많은 문제는 아닙니다)

코드를 통해 수행 할 수 있습니까? 나는 이것에 google을 시도했다 그러나 어떤 도움도 발견 할 수 없다.

제목에서 알 수 있듯이, 저는이 프로젝트에 L5.2를 사용하고 있습니다. 당신은 당신이 당신의 코드에서 호출하거나 사용자 코드에서 직접이 작업을 수행 할 수있는 쉬 스크립트를 작성할 수

)

답변

1

를 사용하는 것이 가능하다 시험에서이 작업을 수행 한 이후

  • \Illuminate\Support\Facades\Artisan::call('migrate');
  • \Illuminate\Support\Facades\Artisan::call('db:seed'); (
  • 그래서 여기에 주위를 재생 후 최종 솔루션은 테스트하지 않습니다.

    내 컨트롤러 :

    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

    모든이 코드를 사용하여 수행 할 수 있습니다.

    1. 나는 복사 및 .env의 파일을 채우기위한 모든 기능을 보지 못했다,하지만 당신은 file_get_contents()를 사용 .env.example 읽고 디스크에 다시 새 파일을 작성하기 전에 내용을 업데이트 할 수있다. 난 단지 $this->seed();
    2. User::create(['column', => $value])
    +0

    도움 주셔서 감사합니다. – Jazzbot