Bladeで使用する場合、おそらく名前空間をすべて記載する必要があると思います。
action('App\Http\Controllers\PostsController@show', $post)
私は名前付きルートを使用するのでaction()
は使ったことが無いですね。
Like!
ドットインストールで勉強中です。
<li><a href="{{ url('/posts', $post->id) }}">{{ $post->title }}</a></li>
ではエラーは出ません。
15のindex.blade.phpで以下のコードを
laravel8用に書き換えたいのですが、うまくいきません。
<li><a href="{{ action('PostsController@show', $post) }}">{{ $post->title }}</a></li>
試したこと
その1
<li><a href="{{ action([PostsController::class,'show'], $post) }}">{{ $post->title }}</a></li>
その2
<li><a href="{{ action(([PostsController::class,'show']), $post) }}">{{ $post->title }}</a></li>
解決方法を教えて下さい。
InvalidArgumentException
Action PostsController@show not defined. (View: C:\Users\hirok\laravel_lessons\myblog\resources\views\posts\index.blade.php)
http://192.168.56.1:8000/
//web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostsController;
Route::get('/', [PostsController::class,'index']);
//Route::get('/posts/{id}', [PostsController::class,'show']);
Route::get('/posts/{post}', [PostsController::class,'show']);
//index.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Blog Posts</title>
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<div class="container">
<h1>Blog Posts</h1>
<ul>
{{--
@foreach ($posts as $post)
<li><a href="">{{ $post->title }}</a></li>
@endforeach
--}}
@forelse ($posts as $post)
<!-- <li><a href="">{{ $post->title }}</a></li> -->
<!-- <li><a href="/posts/{{ $post->id }}">{{ $post->title }}</a></li> -->
<!-- <li><a href="{{ url('/posts', $post->id) }}">{{ $post->title }}</a></li> -->
<!-- <li><a href="{{ action('PostsController@show', $post->id) }}">{{ $post->title }}</a></li> -->
<li><a href="{{ action('PostsController@show', $post) }}">{{ $post->title }}</a></li>
@empty
<li>No posts yet</li>
@endforelse
</ul>
</div>
</body>
</html>
//PostsController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
class PostsController extends Controller
{
public function index() {
// $posts = \App\Post::all();
// $posts = Post::all();
// $posts = Post::orderBy('created_at', 'desc')->get();
$posts = Post::latest()->get();
// $posts = [];
// dd($posts->toArray()); // dump die
// return view('posts.index', ['posts' => $posts]);
return view('posts.index')->with('posts', $posts);
}
public function show($id) {
// $post = Post::find($id);
$post = Post::findOrFail($id);
return view('posts.show')->with('post', $post);
}
}
//show.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>{{ $post->title }}</title>
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<div class="container">
<h1>{{ $post->title }}</h1>
<p>{!! nl2br(e($post->body)) !!}</p>
</div>
</body>
</html>