Làm thế nào tôi có thể trong Laravel 5 tạo biến toàn cục sẽ có sẵn trong tất cả các mẫu Blade?Laravel 5 - biến toàn cầu Blade xem có sẵn trong tất cả các mẫu
Trả lời
Lựa chọn 1:
Bạn có thể sử dụng view::share()
như vậy:
<?php namespace App\Http\Controllers;
use View;
//You can create a BaseController:
class BaseController extends Controller {
public $variable1 = "I am Data";
public function __construct() {
$variable2 = "I am Data 2";
View::share ('variable1', $this->variable1);
View::share ('variable2', $variable2);
View::share ('variable3', 'I am Data 3');
View::share ('variable4', ['name'=>'Franky','address'=>'Mars']);
}
}
class HomeController extends BaseController {
//if you have a constructor in other controllers you need call constructor of parent controller (i.e. BaseController) like so:
public function __construct(){
parent::__construct();
}
public function Index(){
//All variable will be available in views
return view('home');
}
}
Phương án 2: Sử dụng một nhà soạn nhạc:
- Tạo một file soạn nhạc tại
app\Composers\HomeComposer.php
NB: tạo app\Composers
nếu nó không tồn tại
<?php namespace App\Composers;
class HomeComposer
{
public function compose($view)
{
//Add your variables
$view->with('variable1', 'I am Data')
->with('variable2', 'I am Data 2');
}
}
Sau đó, bạn có thể kèm theo các nhà soạn nhạc cho bất kỳ quan điểm bằng cách làm này
<?php namespace App\Http\Controllers;
use View;
class HomeController extends Controller{
public function __construct(){
View::composers([
'App\Composers\HomeComposer' => ['home'] //attaches HomeComposer to home.blade.php
]);
}
public function Index(){
return view('home');
}
}
Phản hồi của bạn thực sự đã giúp tôi với Tùy chọn 1, mặc dù điều gì sẽ xảy ra nếu bạn đang cố truy cập vào '$ user = Auth :: user();' và chuyển biến $ user tới tất cả các mẫu lưỡi bao gồm phần đầu và phần nội dung ? Tôi đã thử điều này bằng cách đặt biến $ user trong BaseController và sau đó chia sẻ nó, nhưng nếu tôi var_dump $ user tôi nhận được một loạt các giá trị được bảo vệ trong mảng. Về cơ bản tôi muốn có thể truy cập tất cả các biến người dùng auth trong suốt ứng dụng trong tất cả các mẫu và khung nhìn. Có vẻ đơn giản nhưng đã dành nhiều giờ cố gắng tìm ra nó. –
Thực tế điều này đã làm việc: ' = $ User ['name']; ?> 'nhưng điều này không hoạt động:' {{$ user-> name}} ' –
@Chad Priddle Điều này sẽ làm việc cho một mảng' {{$ user ['name']}} 'trong khi điều này làm việc cho một đối tượng '{{$ user-> name}}' – Digitlimit
Bạn có thể thực hiện việc này với view composers. Xem các nhà soạn nhạc được thực hiện khi một mẫu được tải. Bạn có thể vượt qua trong phần Đóng với chức năng bổ sung cho chế độ xem đó. Với các nhà soạn nhạc chế độ xem, bạn có thể sử dụng các ký tự đại diện. Để tạo trình xem cho mỗi chế độ xem, chỉ cần sử dụng *
.
View::composer('*', function($view)
{
$view->with('variable','Test value');
});
Bạn cũng có thể thực hiện việc này mà không bị đóng như bạn có thể thấy trong tài liệu.
View::composer('*', 'App\Http\ViewComposers\ProfileComposer');
Lớp trình soạn thảo tiểu sử phải có phương pháp soạn thư.
Xem trình tổng hợp được thực thi khi chế độ xem được hiển thị. Laravel cũng đã xem người sáng tạo. Chúng được thực thi khi một khung nhìn được khởi tạo.
Bạn cũng có thể chọn sử dụng BaseController
bằng phương thức setupLayout. Sau đó, mỗi chế độ xem mà bạn sẽ tải được tải thông qua phương thức setupLayout để thêm một số dữ liệu bổ sung. Tuy nhiên, bằng cách sử dụng trình soạn thảo chế độ xem, bạn chắc chắn rằng mã được thực thi. Nhưng với cách tiếp cận BaseController bạn đã linh hoạt hơn bởi vì bạn có thể bỏ qua việc tải dữ liệu bổ sung.
EDIT: Như đã đề cập bởi Nic Gutierrez, bạn cũng có thể sử dụng chia sẻ lượt xem.
Sự khác biệt giữa điều này và 'view() -> share' là điều này chỉ chạy khi một view được sử dụng - nhưng với 'view() -> share' nó chạy bất kể cái gì - bạn có thể trả về một số JSON trong một cuộc gọi API chẳng hạn - cái mà không sử dụng một khung nhìn . – Petecoop
Create a new Service Provider as suggested in here
Thêm nhà cung cấp dịch vụ mới vào tệp cấu hình (config/app.php).
Trong phương thức khởi động sử dụng cung cấp dịch vụ mới của bạn:
View::share('something_cool', 'this is a cool shared variable');
Bây giờ bạn đã sẵn sàng để sử dụng $ something_cool trong tất cả các quan điểm của bạn.
Hy vọng điều này sẽ hữu ích.
plus, đó là giải pháp tối ưu cho ** biến được sử dụng trên nhiều dịp một trang 503 sau khi 'artisan down'. ** Đưa chuỗi phiên bản của ứng dụng dưới dạng tham số bộ nhớ cache hoặc hiển thị ở chân trang trong khi cập nhật là công việc vặt với các giải pháp khác . (sử dụng một biến env cho rằng có lẽ sẽ là giải pháp sạch nhất) – luchaos
đây là giải pháp tốt hơn câu trả lời được phê duyệt – Christophvh
Tôi nghĩ sự khác biệt chính là người dùng đang hỏi về cách có biến * global * có sẵn trong tất cả các mẫu . Với giải pháp được chấp nhận, người dùng cần phải nhớ mở rộng BaseController và gọi parent :: construct và với giải pháp ViewComposer, anh ta cần gọi View :: composers trong mọi phương thức xây dựng bộ điều khiển để làm cho các biến có sẵn. –
bạn có thể flash nó vào phiên giao dịch, bạn có thể xác định nó trong.tệp env (static vars)
Tìm kiếm giải pháp cho cùng một vấn đề và tìm ra giải pháp tốt nhất trong tài liệu Laravel. Chỉ cần sử dụng View::share
trong AppServiceProvider
như thế này:
View::share('key', 'value');
Chi tiết here.
Ngoài ra, bạn có thể làm điều này trong các tập tin Route.php
:
view()->share('variableName', $variable);
- 1. Laravel 5: Hiển thị HTML với Blade
- 2. Trường dữ liệu ẩn mã toàn cục của Laravel 5 CSRF cho tất cả các biểu mẫu trong một trang
- 3. Thực hiện tất cả các biến toàn cầu
- 4. Javascript - bán phá giá tất cả các biến toàn cầu
- 5. Laravel Blade View - Biến không xác định: lỗi
- 6. Biến toàn cầu trong bộ điều khiển laravel
- 7. Mã PHP bên trong Laravel 5 Blade Template
- 8. In tất cả các biến có sẵn trong một mẫu Smarty
- 9. Tài liệu mẫu của Laravel 4 Blade
- 10. Góc 4/5 Biến toàn cầu
- 11. Tôi làm cách nào để mất các đối tượng dựng sẵn JavaScript và tất cả các biến toàn cầu?
- 12. Thay đổi Laravel Blade Delimiter
- 13. Bỏ qua tất cả các tệp trong toàn cầu .gitignore
- 14. Bao gồm nội dung SVG trong mẫu Lưỡi Laravel 5
- 15. Looping qua mảng lồng trong Laravel Blade mẫu
- 16. Dữ liệu có sẵn cho tất cả các chế độ xem trong mã vạch
- 17. Làm thế nào tôi có thể tạo các biến tự động hoàn thành trong PhpStorm 9 cho các mẫu Blade?
- 18. Laravel Blade không có khoảng trống thừa?
- 19. Laravel Blade ảnh html
- 20. Xác định "biến toàn cầu" trong Django các mẫu
- 21. Số hàng động trong Laravel Blade
- 22. Liệt kê tất cả các biến toàn cục trong Node.js
- 23. Phát hiện tất cả các biến toàn cầu trong một hàm python?
- 24. Laravel Blade Comment gây CONNECTION_RESET
- 25. Laravel 5/Lumen Yêu cầu Tiêu đề?
- 26. Làm thế nào để sử dụng nl2br() trong Laravel 5 Blade
- 27. Laravel blade "đầu vào cũ hoặc biến mặc định"?
- 28. Làm cách nào để kiểm tra các quy tắc yêu cầu biểu mẫu trong Laravel 5?
- 29. laravel thoát tất cả HTML trong mẫu lưỡi
- 30. tài sản tải Blade với https trong Laravel
http://laravel.com/docs/5.0/views#view-composers – lukasgeiter