• Bỏ qua primary navigation
  • Skip to main content
  • Bỏ qua primary sidebar

Thủ thuật thiết kế website

Chia sẻ kinh nghiệm thiết kế website

  • Trang chủ
  • Joomla
    • Thủ thuật Joomla
    • Joomla Extensions
    • Joomla Themes
  • WordPress
    • Thủ thuật WordPress
    • WordPress Plugins
    • WordPress Themes
  • PHP Framework
    • Codeigniter
    • Laravel
    • Laminas
  • App Developer
    • React Native
    • Flutter
  • SEO
  • Chia sẻ
  • Phần mềm
Bạn đang ở:Trang chủ / PHP Framework / Laravel / [Laravel Tutorials] Tổ chức theo dạng packages/modules – Phần 2: Load views và controllers

[Laravel Tutorials] Tổ chức theo dạng packages/modules – Phần 2: Load views và controllers

20/09/2023 - Administrator Để lại bình luận

Trong bài viết trước thì mình đã hướng dẫn các bạn thiết lập cấu trúc và đăng ký module đầu tiên khi phát triển ứng dụng Laravel theo mô hình này.

Trong bài viết này, mình sẽ hướng dẫn các bạn load view, controllers nhé.

1. Load views

Đầu tiên, hãy tạo ra file /core/demo/resources/views/index.blade.php với nội dung bất kỳ nhé.

Có thể thế này:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Demo module</title>
</head>
<body>
<h2>This is the first module of series about Laravel</h2>
</body>
</html>
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Demo module</title> </head> <body> <h2>This is the first module of series about Laravel</h2> </body> </html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Demo module</title>
</head>
<body>
<h2>This is the first module of series about Laravel</h2>
</body>
</html>

Sau đó sửa lại /core/demo/src/Providers/DemoServiceProvider.php nhé.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
namespace Botble\Demo\Providers;
use Illuminate\Support\ServiceProvider;
class DemoServiceProvider extends ServiceProvider
{
public function boot()
{
$this->loadRoutesFrom(__DIR__ . ‘/../../routes/web.php’);
$this->loadViewsFrom(__DIR__ . ‘/../../resources/views’, ‘botble-demo’);
}
}
<?php namespace Botble\Demo\Providers; use Illuminate\Support\ServiceProvider; class DemoServiceProvider extends ServiceProvider { public function boot() { $this->loadRoutesFrom(__DIR__ . ‘/../../routes/web.php’); $this->loadViewsFrom(__DIR__ . ‘/../../resources/views’, ‘botble-demo’); } }
<?php

namespace Botble\Demo\Providers;

use Illuminate\Support\ServiceProvider;

class DemoServiceProvider extends ServiceProvider
{
public function boot()
{
$this->loadRoutesFrom(__DIR__ . ‘/../../routes/web.php’);
$this->loadViewsFrom(__DIR__ . ‘/../../resources/views’, ‘botble-demo’);
}
}

Trông nó sẽ như hình.

Trong bài viết trước, mình đã để việc load route trong hàm register nhưng thực sự thì nó nên để trong hàm boot nhé, hàm register được load đầu tiên nên nó chỉ nên để bind các service vào container nhé.

Load view ở trong function register quá sớm cũng không cần thiết, mặc dù nó vẫn chạy đúng.

Bây giờ, hãy sửa lại /core/demo/routes/web.php  nhé, chúng ta sẽ không return trực tiếp nội dung string như bài viết trước nữa mà sẽ trả ra view.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Route::get(‘/demo’, function () {
return view(‘botble-demo::index’);
});
Route::get(‘/demo’, function () { return view(‘botble-demo::index’); });
Route::get(‘/demo’, function () {
return view(‘botble-demo::index’);
});

Hãy mở http://localhost:8000/demo bạn sẽ thấy nội dung được hiển thị theo view index.blade.php rồi nhé.

Mọi chuyện vẫn khá là dễ dàng phải không nào 😀

2. Tạo controllers

Bây giờ thì bạn có thể sử dụng thư mục source giống như thư mục /app mặc định của Laravel.

Để tạo controller thì ta tạo theo cấu trúc giống của Laravel luôn cho dễ quản lý nhé. Hãy tạo file /core/demo/src/Http/Controllers/DemoController.php với nội dung như sau:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
namespace Botble\Demo\Http\Controllers;
use App\Http\Controllers\Controller;
class DemoController extends Controller
{
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function getIndex()
{
return view(‘botble-demo::index’);
}
}
<?php namespace Botble\Demo\Http\Controllers; use App\Http\Controllers\Controller; class DemoController extends Controller { /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function getIndex() { return view(‘botble-demo::index’); } }
<?php

namespace Botble\Demo\Http\Controllers;

use App\Http\Controllers\Controller;

class DemoController extends Controller
{
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function getIndex()
{
return view(‘botble-demo::index’);
}
}

Mình đã khai báo autoload thư mục /core/demo/src theo chuẩn psr-4 rồi, vì vậy lúc này namespace tính từ thư mục /src trở vào trong sẽ trùng với đường dẫn thư mục nhé.

Tiếp theo, hãy sửa lại /core/demo/routes/web.php để sử dụng controller mới tạo nào.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
Route::group([‘namespace’ => ‘Botble\Demo\Http\Controllers’], function () {
Route::get(‘/demo’, ‘DemoController@getIndex’);
});
<?php Route::group([‘namespace’ => ‘Botble\Demo\Http\Controllers’], function () { Route::get(‘/demo’, ‘DemoController@getIndex’); });
<?php
Route::group([‘namespace’ => ‘Botble\Demo\Http\Controllers’], function () {
Route::get(‘/demo’, ‘DemoController@getIndex’);
});

Chúng ta bọc route /demo trong namespace Botble\Demo\Http\Controllers  thì chúng ta có thể viết ngắn gọn là sử dụng DemoController cho route /demo mà không cần viết toàn bộ namespace nhé, như vậy sẽ đỡ mất công khi chúng ta thêm vài routes mới.

Như vậy là chúng ta đã có thể sử dụng module demo với views và controllers rồi đó, việc sử dụng thêm models cho module này cũng tương tự như việc bạn tạo thêm model trong thư mục /app vậy chỉ cần lưu ý namespace của nó bây giờ là Botble/Demo chứ không phải là App nữa nhé.

Mình sẽ hướng dẫn tiếp về làm việc với database và model trong mô hình phát triển theo dạng modules/packages này trong bài viết sau nhé.

Toàn bộ những thay đổi trong source code so với phần trước các bạn có thể xem tại đây nhé: https://github.com/sangnguyenplus/laravel-package-demo/commit/3d2084c97b270d8efe8e13c496be048d8ff5ec22

Mọi thắc mắc xin để lại ở phần bình luận.

Cám ơn các bạn đã quan tâm tới series này!

Nguồn : https://sangplus.com

0 0 đánh giá
Article Rating
Theo dõi
Đăng nhập
Thông báo của
guest


guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Sidebar chính

LỜI NGỎ

Đây là blog cá nhân, cung cấp các thông tin, kiến thức và kinh nghiệm về lập trình và cuộc sống. Những bài viết được mình sưu tập từ nhiều nguồn, mọi chi tiết liên quan đến bản quyền xin vui lòng liên hệ qua email kairu2607@gmail.com ! Cám ơn rất nhiều.

Tìm kiếm

Thủ thuật Wordpress

T

Tạo trang chuyển hướng download cho WordPress

[flatsome ] Text Ticker (fade) For Top Bar In Flatsome Theme

[Flatsome] Text Ticker (Fade) for Top Bar in Flatsome Theme

Định Dạng ảnh Webp Là Gì ? Làm Thế Nào để Sử Dụng Webp Trên Wordpress 2024 Mới Nhất ?

Định dạng ảnh WebP là gì ? Làm thế nào để sử dụng WebP trên WordPress 2024 mới nhất ?

X

Xử Lý Lỗi Không Xem Được Giỏ Hàng Và Thanh Toán Woocommerce Website WordPress

Vì Sao Rank Math Vượt Trội – SEO WordPress 2023

Hướng Dẫn Ghi đè (override) Folder Inc Trong Child Theme Flatsome

Hướng dẫn ghi đè (override) folder INC trong child-theme Flatsome

Hướng Dẫn Quản Lý Trang Trong Website WordPress

Laravel

Một số câu hỏi câu hỏi phổ biến phỏng vấn tuyển dụng lập trình viên Laravel

Thiết kế cấu trúc folder HMVC cho Laravel

Tại sao lại sử dụng Laravel Service và Repository Pattern?

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P3: khai báo config, translation, helpers và migrations

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P2: Route và mô hình MVC

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P1: Giới thiệu và khởi tạo cấu trúc thư mục cơ bản

Codeigniter Framework

[CodeIgniter 4] Codeigniter 4 Remove Public and Index.php From URL

[CodeIgniter 4] How to upload Codeigniter 4 website on share hosting?

Sửa lỗi website Codeigniter 2.x không chạy được với PHP 7.x

[CodeIgniter 4] Sử dụng cURL trong CodeIgniter 4

[CodeIgniter 4] Sử dụng cache để tăng tốc website trong CodeIgniter 4

[CodeIgniter 4] Xử lý hình ảnh chuyên nghiệp trong CodeIgniter 4

[CodeIgniter 4] Hướng dẫn gửi mail trong CodeIgniter 4

Dịch vụ Thiết Kế Website

Phần mềm hay

Hướng dẫn chuyển đổi php version trong ~/.zshrc ở MacOs

Tim Hieu Ve He Dieu Hanh Macos 1

Sửa file Hosts trong hệ điều hành MacOS

Hướng dẫn sử dụng phần mềm putty trên Windows

Switching between multiple PHP versions on macOS

Byebye Edge Chromium/Microsoft Edge

Copyright © 2025 · Metro Pro on Genesis Framework · WordPress · Đăng nhập

wpDiscuz