TALL로 당신의 첫 번째 블로그 - 다섯 번째 부분 만들기
13124 단어 tailwindcssalpinejslaravellivewire
이 자습서가 끝나면 다음을 수행할 수 있습니다.
참고: Githubhere에 액세스할 수 있는 엔트리 프로젝트가 있습니다.
소개하다.
제2부분 개술
이 자습서의 두 번째 부분에서는 기본 Laravel Jetstream 시작 페이지로 돌아가도록 일반 사용자를 위한 라우팅을 구성한 것을 기억합니다.만약 당신이 기억하고 있다면, 우리 블로그가 대중을 대상으로 하는 페이지에는 두 가지 경로가 있습니다. 바로 홈페이지와 분류 페이지입니다.홈 페이지에는 블로그 게시물이 나열되고 분류 페이지에는 특정 범주의 모든 블로그 게시물이 나열됩니다.이 강좌 시리즈here의 두 번째 부분을 놓치면 언제든지 이 부분을 읽을 수 있습니다.
이 두 페이지에서 작업을 하고, 환영 페이지를 이번 프로그램의 더 재미있는 블로그 게시물 목록으로 바꿀 것입니다. 비록 Tailwind CSS 유틸리티가 소개되었지만.그래.계속 읽어.
Livewire 구성 요소 소개
Livewire 구성 요소는 다시 사용할 수 있는 코드 세션입니다. 한 번 정의하고 프로그램의 다른 부분에서 사용할 수 있습니다.이들은 Laravel 구성 요소와 같지만 Laravel과 Livewire의 기능을 동시에 갖추고 있다.기본적으로 는 해당 뷰 파일을 사용하여 Livewire 구성 요소를 생성합니다.Livewire 구성 요소 클래스도 app/Http/Livewire 디렉터리에 있고, 그에 상응하는 보기는 Resources/views/Livewire 디렉터리에 있습니다.
Livewire 구성 요소 생성
Livewire 구성 요소는 터미널에서
make:livewire
또는 livewire:make
Artisan 명령을 실행하여 생성됩니다.php artisan make:livewire PostItem
// or ...
php artisan livewire:make PostItem
이것은 기본 Livewire Component
클래스를 확장하고 보기와 내연 텍스트를 보여주는 render
방법을 포함하는 가장 기본적인 Livewire 구성 요소를 만들 것입니다.<?php // tall-blog/app/Http/Livewire/PostItem.php
namespace App\\Http\\Livewire;
use Livewire\\Component;
class PostItem extends Component {
public function render() {
return view('livewire.post-item');
}
}
그리고 그에 상응하는 관점:{{\-- tall-blog/resources/views/livewire/post-item.blade.php --}}
<div>
{{\-- If you look to others for fulfillment, you will never truly be fulfilled. --}}
</div>
추가 --inline
옵션은 Livewire의 구성 요소가 내장된 구성 요소이며, render
방법에서 보기를 되돌려주지 않습니다.따라서php artisan make:livewire PostItem --inline
결과는 다음과 같습니다....
public function render() {
return <<<'blade'
<div></div>
blade;
}
...
Livewire 구성 요소의 public
속성은 구성 요소의 보기 파일에서 언제든지 사용할 수 있다는 점을 이해하는 것이 중요합니다. 따라서 순수한 Laravel 컨트롤러를 사용할 때처럼 view
방법으로 전달할 필요가 없습니다.// This:
class PostItem extends Component {
public $post;
public function render() {
return view('livewire.post-item');
}
}
// is the same as this:
class PostItem extends Component {
public $post;
public function render() {
return view('livewire.post-item', ['post' => $post]);
}
}
Livewire 구성 요소 렌더링
Livewire 구성 요소는 다시 사용할 수 있어야 합니다.따라서 Laravel 구성 요소를 사용하고 싶은 모든 곳에서 사용할 수 있습니다.
<livewire:component-name />
태그 구문 또는 @livewire('component-name')
블레이드 명령 구문을 사용하여 구성 요소를 표시할 수 있습니다.<div>
<livewire:post-item />
</div>
{{-- Or --}}
<div>
@livewire('post-item')
</div>
어셈블리에 매개변수 전달
다음과 같이 매개변수를 지정하여 부품에 매개변수를 전달할 수 있습니다.
<livewire:post-item :post="$post" />
{{-- or --}}
@livewire('post-item', ['post' => $post])
PostItem 구성 요소 및 뷰에서 $post
변수를 사용할 수 있습니다.액세스 라우팅 매개변수
Livewire는 기존 Laravel 컨트롤러에서처럼 라우팅 매개 변수에 액세스해야 하는 경우
mount
방법을 사용할 수 있습니다.class MyComponent extends Component {
public $userId;
public function mount($userId) {
$this->userId = $userId;
}
public function render() {
return view('livewire.my-component');
}
}
이 기능을 통해 Livewire 구성 요소는 Laravel 컨트롤러의 행동을 크게 시뮬레이션할 수 있고 전체 페이지 구성 요소를 쉽게 만들 수 있습니다.우리 블로그의 구성 요소 만들기
현재 Livewire 구성 요소에 대해 깊이 있게 알고 계셔서 저희 블로그에 계속 관심을 가져보도록 하겠습니다.위에서 시작하지 않은 경우 터미널에서 다음 명령을 실행하여 프로젝트의 첫 번째 Livewire 구성 요소를 만듭니다.
php artisan make:livewire PostItem
이 구성 요소는 홈 페이지와 클래스 페이지의 목록에 있는 게시물 항목을 표시합니다.app/Http/Livewire/positem에서 구성 요소 클래스를 엽니다.php는 처음에 공공 $post
속성을 추가합니다.component 클래스의 모양은 다음과 같아야 합니다.<?php // tall-blog/app/Http/Livewire/PostItem.php
namespace App\Http\Livewire;
use Livewire\Component;
class PostItem extends Component {
public $post;
public function render() {
return view('livewire.post-item');
}
}
위에서 말한 바와 같이, $post
속성은 현재 보기 파일에서 언제든지 사용할 수 있습니다. public
라고 명시되어 있기 때문입니다.resources/views/livewire/post item에서 칼날 보기 파일을 엽니다.칼날.php.다음 항목이 포함되어 있는지 확인합니다.{{-- tall-blog/resources/views/livewire/post-item.blade.php --}}
<article class="flex flex-col mb-2 rounded-md shadow-md md:mb-0">
<a href="{{ route('post-detail', ['slug' => $post->slug]) }}">
<img src='{{ asset("storage/posts/$post->featured_image") }}'
alt="{{ $post->title }}" class="w-full h-56 rounded-t-md">
</a>
<div class="p-3">
<h3 class="text-lg font-semibold text-gray-900">
<a href="{{ route('post-detail', ['slug' => $post->slug]) }}">
{{ $post->title }}
</a>
</h3>
<p class="text-gray-800">
<a href="{{ route('post-detail', ['slug' => $post->slug]) }}">
{{ $post->excerpt }}
</a>
</p>
<div class="flex flex-row justify-between mt-2">
<a href="{{ route('category', ['category' => $post->category]) }}"
class="px-2 text-sm text-indigo-900 bg-indigo-100 rounded">
{{ $post->category }}
</a>
<small>
{{ $post->published_date }}
</small>
</div>
</div>
</article>
우선, 이 파일의 $post
변수를 사용하고 있으며, 블로그 글 항목을 포함하고 있습니다.Tailwind CSS 클래스 유틸리티를 사용하여 루트 요소<article>
의 스타일을 설계하고 있습니다.이 예에서 우리는 그 내용을 Flexbox에 놓았는데 그 중에서 flex-direction
는 col
이다. 이것은 우리가 위에서 아래로 내용을 놓기를 원한다는 것을 의미한다.mb-2
는 8픽셀 간격의 밑값을 나타내는 실용류로 그 중에서 rounded-md
와 shadow-md
는 각각 중등 원형과 중등 음영 모양을 나타낸다.다음은 앵커 요소
a
태그입니다.게시물 상세 정보 페이지 (route
helper 함수 사용) 에 대한 명칭 루트를 인용하고 있습니다. 이 페이지는 게시물의 slug를 사용하여 링크를 구축합니다.게시물 세부 경로를 만들지 않았으므로 홈 경로 아래에 추가해야 합니다.Route::get('/', function () {
return view('welcome');
})->name('home');
// Add below route
Route::get('{slug}', function ($slug) {
return view('welcome');
})->name('post-detail');
나무의 다음은 그림입니다. 우리는 w-full
나무의 너비 (100%) 를 가득 채웠고, 나무의 높이는 h-56
(224px 상당) 이고, 꼭대기는 원형입니다.post 이미지 src
속성은posts 폴더에 있는 그림을 가리킵니다. 이것은 우리가 이전에 만든 storage
기호 링크에 있습니다.asset
도 도움말 기능 중 하나로 칼날 보기에서 자산(css, 이미지, js) 파일을 표시할 수 있습니다.파일 자체는posts 폴더에 업로드되고 그 이름은 데이터베이스에 저장됩니다.다음 블록은 제목, 발췌문, 분류, 발표 날짜를 포함하고 모든 내용을 하나의 잘 채워진 ((
p-3
div
요소로 포장합니다.제목과 발췌문 모두 Tailwind CSS 색상 유틸리티와 다른 회색 텍스트 색상을 사용합니다.마지막으로 주의해야 할 것은 우리의 글의 종류와 발표 날짜도 왼쪽에서 오른쪽(div
)까지의 플렉스박스row
용기에 포장되어 있으며, 이 용기는 justify-between
실용 프로그램을 가지고 있어 이 두 요소가 div
요소의 좌우 양쪽에 배치될 수 있도록 한다.post-item 구성 요소가 완성되었습니다.홈 페이지의 모든 게시물을 보여 주는 다른 구성 요소를 만듭니다.이 구성 요소는 데이터베이스에서 모든 댓글을 가져오고, 위에서 만든postitem 구성 요소에 모든 댓글을 표시합니다.[게시물 표시] 구성 요소를 만들려면 명령을 입력합니다.
php artisan make:livewire ShowPosts
생성된 구성 요소를 app/Http/Livewire/ShowPosts에서 엽니다.php는 다음 내용과 동일한지 확인합니다.<?php // tall-blog/app/Http/Livewire/ShowPosts.php
namespace App\Http\Livewire;
use App\Models\Post;
use Livewire\Component;
class ShowPosts extends Component {
public $posts;
public function mount() {
$this->posts = Post::where('is_published', true)->get();
}
public function render() {
return view('livewire.show-posts')->layout("layouts/guest");
}
}
$posts
속성은 데이터베이스에서 얻은 모든 댓글을 저장합니다. 이 구성 요소를 설치할 때 이 댓글을 저장합니다. (이것이 바로 조회를 mount
방법에 두는 이유입니다.)우리는 발표된 게시물에만 흥미를 느낀다.게스트 레이아웃 파일인 사용할 레이아웃도 지정했습니다.기본적으로 Livewire는 리소스/뷰/레이아웃/어플리케이션을 사용합니다.칼날.php 레이아웃 파일.그러나 Jetstream은 이 레이아웃에 인증과 다른 검사를 추가했기 때문에 이 검사가 없는 상황에서 레이아웃 파일을 사용하면 오류가 발생할 수 있습니다. 이것이 바로 리소스/views/layouts/guest를 사용하는 이유입니다.칼날.php 레이아웃 파일.현재 상응하는 참고 자료/views/livewire/show 댓글을 엽니다.칼날php blade 보기를 표시하고 다음을 입력합니다.
<div class="gap-4 m-2 md:grid md:grid-cols-2 lg:grid-cols-4">
@foreach ($posts as $post)
@livewire('post-item', ['post' => $post], key($post->id))
@endforeach
</div>
이것은 네가 상상한 것보다 간단하다.우리는 $posts
집합에서 순환하고, 이전에 만든 PostItem
구성 요소를 사용하여 집합을 보여줍니다. $post
매개 변수를 post
매개 변수에 전달하고, 키 post id를 줍니다. 이 키는 현재 post 항목을 다른 항목과 구분하는 데 사용됩니다. 예를 들어,post의 가시성을 전환하려면 매우 필요합니다.순풍 부분에서 저희가 보여드렸어요.
모든 이 물건들 사이에는 16화소의 간격이 있다.물론 8 픽셀의 간격도 있다.
이제 홈 페이지 경로를 다음과 같이 변경합니다.
...
Route::get('/', App\Http\Livewire\ShowPosts::class)->name('home');
...
터미널에 연결하여 php artisan serve
를 실행하고 브라우저를 http://127.0.0.1:8000로 열면 홈페이지에서 댓글을 볼 수 있습니다.이제 다음 Artisan 명령을 실행하여 마지막 Livewire 구성 요소를 만들면 특정 범주의 모든 게시물이 표시됩니다.
php artisan make:livewire CategoryPosts --inline
show posts 구성 요소 보기 파일을 다시 사용하기 때문에 CategoryPosts
구성 요소를 연결할 것입니다.이 두 가지 방법은 데이터베이스에서 필터하는 것 외에 다를 것이 없기 때문에 이런 방법을 사용하는 것이 더욱 간단하다.다음과 일치하도록 구성 요소 수정
CategoryPosts
:<?php
// tall-blog/app/Http/Livewire/CategoryPosts.php
namespace App\Http\Livewire;
use App\Models\Post;
use Livewire\Component;
class CategoryPosts extends Component {
public $posts;
public function mount($category) {
$this->posts = Post::where('category', $category)
->where('is_published', true)
->get();
}
public function render() {
return view('livewire.show-posts')
->layout("layouts/guest");
}
}
이것은 ShowPosts
구성 요소와 거의 같습니다. 다만, 쿼리를 mount
방법에 기반한 주어진 종류의 쿼리 문자열로 변경합니다.범주 라우트를 다음과 같이 변경합니다....
Route::get('categories/{category}', CategoryPosts::class)->name('category');
...
내장 PHP 서버가 실행되지 않으면 서버를 시작합니다.php artisan serve
이제 홈페이지로 돌아가서 어떤 종류든 클릭하세요.범주 페이지로 전송하여 같은 범주의 게시물을 표시합니다.이 회는 이것으로 끝냅니다.나는 네가 이 강좌를 정말 좋아하길 바란다. 나도 네가 다음 편을 읽는 것을 보고 싶다.우리는 우리의 및 Facebook 페이지에 업데이트를 발표했다.만약 당신이 개의치 않는다면, 당신은 우리의 모든 소셜 미디어 페이지를 주목해서, 새로운 댓글을 올릴 때 알림을 받을 수 있습니다.
트위터:
Facebook:https://www.facebook.com/bandughana
감사합니다. 다음 댓글 또 만나요.
Reference
이 문제에 관하여(TALL로 당신의 첫 번째 블로그 - 다섯 번째 부분 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nayi10/creating-your-first-blog-with-tall-part-five-38mi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)