Laravel: Views

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Tạo views

Các thẻ HTML được phục vụ bởi ứng dụng của bạn và tách logic điều khiển / ứng dụng trình bày. Views được lưu trữ trong thư mục resources/views. Một view đơn giản có thể như sau:

<!-- View được lưu trữ trong resources/views/greeting.php -->

<html>
    <body>
        <h1>Hello, {{ $name }}</h1>
    </body>
</html>

Vì view này được lưu trữ tại resources/views/greeting.php nên ta có thể trả về nó bằng cách sử dụng view global view như sau:

Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
});

Như bạn có thể thấy, đối số đầu tiên được truyền tới helper view tương ứng với tên của tập tin xem trong  thư mục resources/views. Đối số thứ hai là một mảng dữ liệu. Trong trường hợp này, ta truyền đi biến name, nó được hiển thị trong view sử dụng Các mẫu Blade.

Tất nhiên, các view cũng có thể được lồng trong thư mục con của thư mục resources/views. Ký hiệu dấu chấm "." có thể được sử dụng để tham chiếu các view lồng nhau. Ví dụ, nếu view của bạn được lưu trữ tại resources/views/admin/profile.php, bạn có thể tham chiếu như sau:

return view('admin.profile', $data);

Xác định sự tồn tại của một view

Nếu bạn cần phải xác định xem một view nào đó có tồn tại hay không, bạn có thể sử dụng facade View. Phương thức exists sẽ trả về true nếu view tồn tại:

use Illuminate\Support\Facades\View;

if (View::exists('emails.customer')) {
   //
}

Truyền dữ liệu tới views

Như bạn đã thấy trong các ví dụ trên, bạn có thể truyền một loạt các dữ liệu tới views:

return view('greetings', ['name' => 'Victoria']);

Khi truyền thông tin theo cách này,  $data nên là một mảng với các cặp khóa/giá trị. Bên trong view của bạn thì bạn có thể truy cập từng giá trị sử dụng khóa tương ứng của nó, chẳng hạn như <?php echo $key; ?>. Như là một thay thế để truyền một mảng hoàn chỉnh của dữ liệu đến chức năng helper view , bạn có thể sử dụng các phương thức with để thêm các phần dữ liệu riêng biệt tới view:

return view('greeting')->with('name', 'Victoria');

Chia sẻ dữ liệu với tất cả các views:

Thỉnh thoảng, bạn có thể cần phải chia sẻ một phần dữ liệu với tất cả các view trong ứng dụng của bạn. Bạn có thể làm như vậy bằng cách sử dụng phương thức share của view facade. Thông thường, bạn nên đặt các lời gọi đến  share trong phương thức boot của nhà cung cấp dịch vụ. Bạn được quyền thêm chúng vào  AppServiceProvider hoặc tạo ra một nhà cung cấp dịch vụ riêng để chứa chúng:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::share('key', 'value');
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

View Composers

Chúng là những callbacks hoặc các phương thức của lớp được gọi khi một view được render. Nếu bạn có dữ liệu mà bạn muốn bị ràng buộc vào một view mỗi lần view được render thì view composer có thể giúp bạn tổ chức lại logic đó vào một nơi duy nhất.

Trong ví dụ dưới đây ta đăng ký một view composer trong một  nhà cung cấp dịch vụ. Chúng ta sẽ sử dụng View facade để truy cập Illuminate\Contracts\View\FactoryApp\Http\ViewComposers. Hãy nhớ rằng, Laravel không có thư mục mặc định cho view composers, tuy nhiên bạn được tự do tổ chức chúng tuy nhiên bạn muốn. Ví dụ, bạn có thể tạo một  thư mục như sau:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function boot()
    {
        // Using class based composers...
        View::composer(
            'profile', 'App\Http\ViewComposers\ProfileComposer'
        );

        // Using Closure based composers...
        View::composer('dashboard', function ($view) {
            //
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

 

Hãy nhớ rằng, nếu bạn tạo ra một nhà cung cấp dịch vụ mới để chứa view composers của bạn, bạn sẽ cần phải thêm các nhà cung cấp dịch vụ cho các mảng  providers trong tập tin cấu hình config/app.php.

 

Bây giờ chúng ta đã đăng ký composer, phương thức ProfileComposer@compose sẽ được thực hiện mỗi lần view profile được render. Vì vậy, chúng ta hãy xác định các lớp composer:

<?php

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use App\Repositories\UserRepository;

class ProfileComposer
{
    /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * Create a new profile composer.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        // Dependencies automatically resolved by service container...
        $this->users = $users;
    }

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('count', $this->users->count());
    }
}

Ngay trước khi view được render thì phương thức compose của composer được gọi với thể hiện Illuminate\View\View. Bạn có thể sử dụng phương thức with để ràng buộc dữ liệu để xem.

Tất cả các composer đều được giải quyết thông qua service container, vì vậy bạn có thể gõ-gợi ý bất kỳ dependence mà bạn cần trong constructor của composer.

Gắn một Composer cho nhiều view

Bạn có thể đính kèm một composer vào nhiều view cùng lúc bằng cách truyền một mảng view tới phương thức composer:

View::composer(
    ['profile', 'dashboard'],
    'App\Http\ViewComposers\MyViewComposer'
);

Phương thức composer cũng chấp nhận ký tự * như là một ký tự đại diện, cho phép bạn đính kèm một composer cho tất cả các view:

View::composer('*', function ($view) {
    //
});

View Creater

View này rất giống view composer, tuy nhiên, chúng được thực hiện ngay lập tức sau khi view được khởi tạo thay vì chờ đợi cho đến khi view sắp được render. Để đăng ký một view creater thì ta sử dụng phương thức  creator:

View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');
» Tiếp: Các mẫu Blade
« Trước: Session
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!