Views trong Laravel

Views trong Laravel
Ở bài viết này chúng ta sẽ cùng tìm hiểu về view trong laravel, view là một phần không thể thiếu ở mỗi hành động, là nơi hiển thị dữ liệu cho người dùng cái mà chúng ta nhìn thấy trên trình duyệt.

Ở bài viết này chúng ta sẽ cùng tìm hiểu về view trong laravel, view là một phần không thể thiếu ở mỗi hành động, là nơi hiển thị dữ liệu cho người dùng cái mà chúng ta nhìn thấy trên trình duyệt.

Trong laravel view bắt buộc phải được nằm trong thư mục resources/views, tên file có đuôi mở rộng là .php hay .blade.php với view blade. Trong view bạn có thể sử dụng tất cả các ngôn ngữ như: HTML, CSS, JS, ....

Để hiểu rõ hơn về view chúng ta quay lại ví dụ ở bài viết trước nhé. Sau khi đăng ký cho trang home 1 route chúng ta tiến hành tạo một file home.blade.php với nội dung:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Home</title>
</head>
<body>
    <h2>Home</h2>
</body>
</html>

Để chạy được file này các bạn vui lòng xem lại nội dung bài trước nhé

Giờ chúng ta sẽ cùng nhau tìm hiểu cách để lấy dữ liệu từ controller ra view:

Giả sử bạn muốn hiển thị danh sách bài viết từ cơ sở dữ liệu ra trang home

Với with:

File ControllerName.php sẽ thay đổi:

public function index(){
   $data = Post::paginate(20);
   return view('home')->with('datas', $data);
}

Với mảng $datas chính là dữ liệu chúng ta cần

Tiếp theo tại file home.blade.php

@foreach ($datas as $data)
    {{ $data->id }}
@endforeach

Hoặc nếu bạn muốn code laravel của mình gọn gàng hơn có thể dùng đến compact:

$data = Post::paginate(20);
return view('home', compact('data'));

Cách hiển thị ở view cũng tượng tự như trên không khác gì cả.

View Composers

View composer là các hàm gọi lại hoặc các phương thức của lớp được gọi khi một chế độ xem được hiển thị. Nếu bạn có dữ liệu mà bạn muốn liên kết với một chế độ xem mỗi khi chế độ xem đó được hiển thị, thì một trình tổng hợp chế độ xem có thể giúp bạn tổ chức logic đó vào một vị trí duy nhất. View composer có thể tỏ ra đặc biệt hữu ích nếu cùng một chế độ xem được trả về bởi nhiều tuyến hoặc bộ điều khiển trong ứng dụng của bạn và luôn cần một phần dữ liệu cụ thể.

Thông thường, các view composer sẽ được đăng ký tại một trong các provider của ứng dụng. Trong ví dụ này, chúng tôi giả định rằng chúng tôi đã tạo một App\Providers\ViewServiceProvider mới để chứa logic này.

namespace App\Providers;
 
use App\View\Composers\ProfileComposer;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
 
class ViewServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
 
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // Using class based composers...
        View::composer('profile', ProfileComposer::class);
 
        // Using closure based composers...
        View::composer('dashboard', function ($view) {
            //
        });
    }
}

Hãy nhớ rằng, nếu bạn tạo một provider mới để chứa đăng ký view composer của mình, bạn sẽ cần thêm provider vào mảng providers trong tệp cấu hình config/app.php.

Bây giờ chúng ta đã đăng ký composer, phương thức composer của lớp App\View\Composers\ProfileComposer sẽ được thực thi mỗi khi hiển thị view profile. Hãy xem một ví dụ về lớp composer:

namespace App\View\Composers;
 
use App\Repositories\UserRepository;
use Illuminate\View\View;
 
class ProfileComposer
{
    /**
     * The user repository implementation.
     *
     * @var \App\Repositories\UserRepository
     */
    protected $users;
 
    /**
     * Create a new profile composer.
     *
     * @param  \App\Repositories\UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }
 
    /**
     * Bind data to the view.
     *
     * @param  \Illuminate\View\View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('count', $this->users->count());
    }
}

 

Hồ Hữu Hiền

Mình là developer nên đôi khi viết bài không hay lắm mong các bạn thông cảm. Nếu muốn biết thêm thông tin về mình thì vui lòng vào website này để biết. https://huuhienqt.dev/

Để lại bình luận