Contents
はじめに
何をするにもhello worldができないと話にならないので試行したはずが、artisanコマンドなるモノも履修しないとならないようです。
やってみましょう
環境はこれを使います。
以降Docker上のコンテナにてLaravelが稼働している状態で話を進めます。
サーバ上のLaravelで試行する場合は適宜読み替えてください。
https://github.com/mayarin/docker-laravel
参考リンク
https://qiita.com/t-iguchi/items/1c93647dc5fc168e6a4a
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。
https://github.com/niwasawa/php-laravel-hello-world
サンプルは問題なく動いた。それに
$ php artisan make:controller HelloController
で作ったクラスも稼働した。更に深追い。
Routingの記述方法が違っていたw
https://qiita.com/miriwo/items/4b78e91cec083509a5e7
Route::get('/hello', 'App\Http\Controllers\HelloController@index');
動いた!!
\routingの記述方法がバージョンで異なっていましたw/
ちゃんとバージョンから見ようよ私。Swiftで散々踏んだじゃん。
やっと本懐にたどり着いた。
結び
ってcomposerも習得してないからこれもやらないと。
どんだけ置いていかれてるんだ私。