【Laravel】LaravelでHelloWorld@Docker

研究
この記事は約8分で読めます。

この記事は1年前の記事です。当時の情報、理解に基づいておりますのでご留意ください

はじめに

何をするにもhello worldができないと話にならないので試行したはずが、artisanコマンドなるモノも履修しないとならないようです。

やってみましょう

環境はこれを使います。
以降Docker上のコンテナにてLaravelが稼働している状態で話を進めます。
サーバ上のLaravelで試行する場合は適宜読み替えてください。

mayarin/docker-laravel
Contribute to mayarin/docker-laravel development by creating an account on GitHub.
【Laravel】DockerにてLaravelのローカル開発環境を作ってみる…
はじめにDockerにてvue.jsとMySQLを連携させようと思ったら、Node.jsかLaravelが出てきたよっと。ならばPHPerなのでLaravelを採用して、以下の構成でイメージを作ろうと思い。MySQLvue...

参考リンク

laravelでHello World - Qiita
PHPで人気のlaravelを使ってみます。 1.環境 php, composer, laravelのインストールは完了しているものとします。   version os windows10 64bit home ...

HelloController.phpを生成

/backend/routes/web.php に以下の通りに20行目の一文を追加します。

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('hello', 'HelloController@index');// <-追加

次に

$ docker-compose exec app bash

で稼働中のDockerのappコンテナに入り、以下のコマンドを走らせます。

$ php artisan make:controller HelloController

走らせると、backend/app/Http/Controllers/HelloController.php がよしなに生成されます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    //
}

このようになんもしない状態で生成されるので、命令を加えます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        echo 'hello!';
    //   return view('hello');
    }
}

参考文献では12行目のようにviewを返すよう指示しますが、虫の知らせがしたので敢えて11行目のようにhelloをechoさせます。
この状態で http://127.0.0.1:10080/hello にアクセスします。

あるあるっぽく叱られました。(´・ω・`)

Routingを疑ってみる

試しに backend/routes/web.php をこうしたら、test がechoされるんだ。
(ってこういうことができるのって面白い)

Route::get('/', function () {
    echo 'test';
    // return view('welcome');
});

Route::get('hello', 'HelloController@index');

一段階飛ばして、backend/resources/views/hello_world.blade.php を作り
routes/web.php から直で参照させると、うまくいくんだ。

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    echo 'test';
    // return view('welcome');
});

Route::get('hello_dummy', function () {
    // echo 'hello world';
    return view('hello_world');
});

Route::get('hello', 'HelloController@index');

HelloController@index だけどうやっても見つからないと言うんだ。

判らないモノは深追い。bladeは見えてるから、たぶんスコープの問題だ。

$ php artisan route:list
  Illuminate\Contracts\Container\BindingResolutionException 

  Target class [HelloController] does not exist.

  at vendor/laravel/framework/src/Illuminate/Container/Container.php:811
    807▕ 
    808▕         try {
    809▕             $reflector = new ReflectionClass($concrete);
    810▕         } catch (ReflectionException $e) {
  ➜ 811▕             throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
    812▕         }
    813▕ 
    814▕         // If the type is not instantiable, the developer is attempting to resolve
    815▕         // an abstract type such as an Interface or Abstract Class and there is

  1   [internal]:0
      Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}(Object(Illuminate\Routing\Route))

      +13 vendor frames 
  15  [internal]:0
      Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}(Object(Illuminate\Routing\Route))

php artisan route:list で叱られる。
Paizaで試しても苛まれる。
流石になんか変だと思いhelloworldまでたどり着いたサンプルを取得。
但しLaravel Framework 5.8.38。

niwasawa/php-laravel-hello-world
A sample code of PHP with Laravel. Contribute to niwasawa/php-laravel-hello-world development by creating an account on GitHub.

サンプルは問題なく動いた。それに

$ php artisan make:controller HelloController

で作ったクラスも稼働した。更に深追い。

Routingの記述方法が違っていたw

Laravel テストコードを書いてみよう - Qiita
目的 Laravelのフューチャーテストコードの書き方をまとめる 実施環境 ハードウェア環境 項目 情報 OS macOS Catalina(10.15.5) ハードウェア MacBook Pr...
Route::get('/hello', 'App\Http\Controllers\HelloController@index');

動いた!!
\routingの記述方法がバージョンで異なっていましたw/

ちゃんとバージョンから見ようよ私。Swiftで散々踏んだじゃん。
やっと本懐にたどり着いた。

結び

ってcomposerも習得してないからこれもやらないと。
どんだけ置いていかれてるんだ私。

コメント

タイトルとURLをコピーしました