【Laravel】インターフェイスの実装ができません
Q&A
Closed
解決したいこと
MyServiceInterfaceインターフェイスを実装したMyServiceクラスのsayメソッドとalldataメソッドをを呼び出したいです。
/helloにアクセスして下記の画像のように表示させたいです。
現状エラーが出ています。
コードに間違いがあれば教えていただきたいです。
発生している問題・エラー
Unresolvable dependency resolving [Parameter #0 [ <required> int $id ]] in class App\MyClasses\MyService
該当するソースコード
web.php
<?php
use App\Http\Controllers\HelloController;
use Illuminate\Support\Facades\Route;
Route::get('hello',[HelloController::class,'index']);
HelloController.php
<?php
namespace App\Http\Controllers;
use App\MyClasses\MyServiceInterface;
class HelloController extends Controller
{
function __construct()
{
}
public function index(MyServiceInterface $myservice, int $id = -1)
{
$myservice->setId($id);
$data = [
'msg' => $myservice->say(),
'data' => $myservice->alldata(),
];
return view('hello.index', $data);
}
}
MyServiceInterface.php
<?php
namespace App\MyClasses;
interface MyServiceInterface
{
public function setId(int $id);
public function say();
public function allData();
public function data(int $id);
}
MyService.php
<?php
namespace App\MyClasses;
class MyService implements MyServiceInterface
{
private $serial;
private $id = -1;
private $msg = 'no id...';
private $data = ['Hello', 'Welcome', 'Bye'];
function __construct(int $id)
{
$this->setId($id);
$this->serial = rand();
echo "「" . $this->serial . "」";
}
public function setId($id)
{
$this->id = $id;
if ($id >= 0 && $id < count($this->data))
{
$this->msg = "select id:" . $id . ', data:' . $this->data[$id] . '"';
}
}
public function say()
{
return $this->msg;
}
public function data(int $id)
{
return $this->data[$id];
}
public function alldata()
{
return $this->data;
}
}
AppServiceProvider.php
<?php
namespace App\Providers;
use App\MyClasses\MyService;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
app()->bind('App\MyClasses\MyServiceInterface', 'App\Classes\MyService');
}
}
index.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Index</title>
</head>
<body>
<h1>Hello/Index</h1>
<p>{!!$msg!!}</p>
<ul>
@foreach ($data as $item)
<li>{!!$item!!}</li>
@endforeach
</ul>
</body>
</html>
自分で試したこと
教材のサンプルコードと間違っていないか確認した。
キャッシュのクリアを行った。
php artisan view:clear
0