時々、特にキャリアの初期段階では、自分は指示に従っているのに何も進まないように見えることがありますが、他の人はそれがとても簡単だと感じているようです。
それはかなり落胆することがあるかもしれません。数十年後でも、まったく同じことを私が経験した方法をいくつか説明したいと思います。そこで私はここで、物事をうまく進めるために私がつまずいたことやつまずいたことを詳しく説明しようとしています。これがこのテーマに関する私の最初の投稿ですが、もっと投稿していきたいと思っています。
Laravel は、素晴らしい開発者エクスペリエンスを提供するよう努めています [...]
PHP Web フレームワークを初めて使用する場合でも、長年の経験がある場合でも [...]
Laravel は、少なくとも PHP 界隈では「開発者向けフレームワーク」として宣伝されています。その理由は、他のフレームワークよりも必要最小限であり、シンプルだが厳密なアーキテクチャの決定が必要だからです。私は他にもいくつかの PHP フレームワーク - Drupal 7 を作成しました。 、Drupal 8、Symfony、WordPress、Concrete5、PrestaShop、CodeIgniter が頭の中に浮かびます - したがって、これには触れません準備ができていません。
ベアボーン ラップトップから始めて、どこまで到達できるか試してみます。
最初の Laravel アプリケーションを作成する前に、ローカル マシンに PHP、Composer、および Laravel インストーラーがインストールされていることを確認してください。さらに、アプリケーションのフロントエンド アセットをコンパイルできるように、Node と NPM または Bun のいずれかをインストールする必要があります。
わかりました。問題ありません。私はその PHP の一部を自分で適切にインストールし、getcomposer.org から Composer を入手して、次に「Laravel インストーラー」をインストールする方法を考えます。どうやら、私のディストリビューションには Node 22 がそのまま組み込まれているか、以前に何か他のものを設定したときにインストールされたようです。そのため、それはカバーされるはずです。
$composer global require laravel/installer
ドーン。終わり。まだ問題はなく、良いスタートを切っており、自信はかつてないほど高まっています。
$ laravel 新しいサンプルアプリ
zsh: コマンドが見つかりません: laravel
ああ。おそらく私は、その最高の自信についてもう一度考え直す必要があるかもしれません。
つまり、composer は通常のバイナリ パスには何もインストールせず、composer インストーラー自身をシステム パスに追加することもないようです。私は、composer がインストールしたバイナリを、どのようなパスに存在しても直接実行してきたので、これまで実際にそのようなことに直面したことはありませんでした。たとえば、Drupal の場合、ベンダー/drush/drush/drush またはベンダー/bin/drush が存在します。実行しているバージョン。自分自身のシンボリックリンクまたはエイリアスを追加する必要がありますか、それとも、composer が「グローバルに」追加した Laravel バイナリを見つける必要がありますか?
わからないので、これを探す必要があります。
Stack Overflow の答えでいくつかの手がかりを見つけました。composer global config bin-dir --absolute で、composer バイナリ ディレクトリを見つけることができます。どうやら、composer の最新バージョンでは、実行可能コマンドを使用すると、そのディレクトリに配置されるようです。ヒエラルキーに負けるよりも。
いいですね。起動スクリプトに何かを追加して、それをパスに追加できます...ただし、このコマンドはパス以外のものを生成します...
$composer global config bin-dir --absolute
現在のディレクトリを /home/moopet/.config/composer
に変更しました /home/moopet/.config/composer/vendor/bin
...その文字列全体をディレクトリとして使用することはできません。おそらく最後の行を取得するために tail を使用する必要があるかもしれません。待って、いいえ、この SO の回答には --quiet フラグを含む別のコメントがあります。それは何をするのですか?作曲家 --help:
を試してみます使用法:
リスト [オプション] [--] []
そうですね、実際には、コンポーザー自体のコマンドではなく、list サブコマンドのヘルプを提供するのは、実際には、コンポーザーの裸のコマンドで --help を実行することです。これには私は少し戸惑いました。
-q --queen メッセージを出力しません
うーん、それは役に立ちそうにありません!何らかのアウトプットが必要です。他に何がありますか?
--raw 生のコマンドリストを出力します
--format=FORMAT 出力形式 (txt、xml、json、または md) [デフォルト: "txt"]
おそらくこれは次のいずれかでしょうか?
「--raw」オプションは存在しません。
「--format」オプションは存在しません。
いいえ。思った通り、これらはリストするためのオプションであり、一般的に使用されるフラグではありません。
とにかく、うんちと面白いことだけを目的として、--quiet を付けて実行しましょう:
$composer global config bin-dir --absolute --quiet
/home/moopet/.config/composer/vendor/bin
まあ、どうですか、うまくいきました。文書化が不十分なだけです。
これをシェル起動スクリプトに小さなガード コードを追加して、続行します。
if command -v composer >/dev/null; then export PATH=$(composer global config bin-dir --absolute --quiet):$PATH fi
今回は、laravel の新しいサンプルアプリが起動し、いくつかのことを求めるプロンプトが表示されます。スターター キットを除いて、違いがわかるほどドキュメントを読んでいないため、デフォルトを受け入れます。 「Breeze」を選択したのは、ドキュメントにそのように記載されているためです。
インストールプロセスが開始され、次の状態になるまではすべて問題なく表示されます。
- ルートのcomposer.jsonにはlaravel/pint ^1.0が必要です -> laravel/pint[v1.0.0, v1.1.0, v1.1.1] で満足可能。
- laravel/pint[v1.0.0, ..., v1.1.1] ext-xml が必要 * ->システムにありません。 PHP の XML 拡張機能をインストールまたは有効にします。
ちょっと待って、PHP には XML 拡張機能が必要ですか?それは要件としてリストされていませんでした。 OK、php-xml を簡単に apt インストールします。
よし、すべてインストールされました。セットアップを再度実行します。
laravel 新しいサンプルアプリ
NewCommand.php の 789 行目:
アプリケーションはすでに存在します!
ああ。
つまり、インストーラーは途中まで進み、依存関係を検証していないために失敗し、アプリが壊れた状態のままになってしまったのです。それは良い兆候ではありません。 Laravel はバージョン 11 ですか?
もうすでに基本的な事前要件の確認が行われているでしょうか?しかたがない。 rm -r example-app を実行して、もう一度開始します。まだ本格的に開始していないため、何も失われません。
簡単に言うと1 次に不足している依存関係は、DOM 拡張機能、またはおそらく XML 拡張機能です。または、cURL 拡張子かもしれません。
- phpunit/phpunit[11.0.1, ..., 11.4.3] ext-dom * -> が必要です。システムにありません。 PHP の dom 拡張機能をインストールまたは有効にします。
- ルートのcomposer.jsonにはphpunit/phpunit ^11.0.1 ->が必要です。 phpunit/phpunit[11.0.1, ..., 11.4.3] によって満たされます。
それでは、php-dom をインストールする必要があるのでしょうか?いいえ、他のものを試してみてください。再びスタックオーバーフロー。 php-curlをインストールする必要があることがわかりました。そうだね。
先へ。 rm -r ディレクトリを指定し、セットアップ ウィザードを再度実行します。
どのデータベース サーバーを使用するかを尋ねられます。すべての横に「PDO 拡張機能がありません」と表示されます。
ため息をつきます。
インストーラーを終了し、ディレクトリ全体を再度削除し、php8.3-mysql を apt インストールします。直接の php-pdo パッケージがなく、機能する php-mysql のエイリアスもないため、面倒な apt を実行しました。検索しています。
IlluminateDatabaseQueryException
SQLSTATE[HY000] [2002] 接続が拒否されました (接続: mysql、SQL: select selected (select 1 from information_schema.tables where table_schema = 'laravel_example_app' and table_name = 'migrations' and table_type in ('BASE TABLE', 'SYSTEM VERSIONED') )) '存在')
今、何、何? このインストーラーはデータベースへの接続の詳細を一度も尋ねてきません。そしてそれは...何かに対して SQL コマンドを実行しようとしています。誰にも分からない?
たまたまですが、私は LAN 内の別のホストで MySQL サーバーを実行しており、それを使用する準備ができていました (ただし、独自のデータベースを持ち込むことが Laravel の要件としてリストされていないことに注意してください)。 SQLite をインストールするべきだったと思います。資格情報を必要としないため、おそらくうまくいったでしょう。
sudo apt install php8.3-sqlite
もう一度試してください。
rm -r サンプルアプリ
laravel の新しいサンプルアプリ
...
大成功。ハッカーの声「入っています」。勝利のために。成功した子です。
できた?
と思います。しかし、誰かがこれにどれくらい時間がかかるかと尋ねたら、熱心なドキュメントと評判に基づいて、私は 20 分と答えるでしょう。私が仕事でそれをやっていれば、私のプロジェクト マネージャーは開発者の見積もりの経験に基づいてその 2 倍か 4 倍を見積もっていたでしょう。
実際にはどのくらいかかりましたか?ある晩は1時間ほど、翌日は1時間ほど。急いではいませんでしたが、簡単ではありませんでした。
そして、あなたは何を知っていますか? 満足できません。インストーラーのその部分が完全に壊れているように見えるため、MySQL は使用されていません。私は SQLite を使用していますが、これは実際の運用環境で起こっていることからさらに一歩進んだものです。したがって、実際のチュートリアルを始める前に、TODO リストにいくつかのことが確実に残っています。
しかし、それは実行されます。ビルド手順は、問題なく完了したと主張しています。
次のフェーズに進む準備ができました。ブラウザでデモ ページを開くとすぐにコンソールに表示される JsonException、構文エラー、および ProcessTimedOutException を修正します。
うーん、
物事がうまくいけば、そうですね。
コーラス: 遅すぎます ↩
以上が(初めて)Laravelのインストールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。