Thứ Bảy, 1 tháng 9, 2018

Laravel với MongoDB

Mở đầu

Hello anh em, đến hẹn lại lên hôm nay mình xin chia sẻ với mọi người về chủ đề Laravel kết hợp với MongoDB mà thông thường ta hay kết hợp Laravel với MySQL. Và mặc định thì Laravel chỉ hỗ trợ các cơ sở dữ liệu có cấu trúc như: MySQL, PostgreSQL, SQLite, SQL Server. Tuy nhiên theo thời thế thì NoSQL ngày càng phát triển mạnh mẽ và được tin dùng bởi nó linh động và có tốc độ cao mà điển hình là MongoDB. Trong phạm vi bài viết này mình chỉ xin đề cập đến MongoDB thay cho cơ sở dữ liệu không có cấu trúc NoSQL. Để tận dụng được những điểm tốt của NoSQL bây giờ ta sẽ tìm cách để có thể sử dụng MongoDB trong Laravel để mang lại hiệu quả tốt nhất. Bắt đầu thôi...

Thứ Tư, 15 tháng 8, 2018

Cách sửa lỗi thêm kí tự "/" vào column có kiểu json khi sử dụng lệnh response()->json

Gỉa sử ta có 1 model là Place được mapping từ table places, table này có feild là place_list_image có kiể dữ liệu là json

Và có 1 PlaceController có 1 function là indexJson dùng để tạo file json có nội dung như sau

public function indexJson(){    $places = Place::all();    $header = array (       'Content-Type' => 'application/json; charset=UTF-8',       'charset' => 'utf-8'    );
      return response()->json(['places' => $places,           'status' => Response::HTTP_OK],200,$header,JSON_UNESCAPED_UNICODE);
}

Khi tạo Json thì trường place_list_image sẽ bị encode 1 lần nữa và sẽ thêm các kí tự "/" vào nộii dung trường place_list_image. Để giải quyết vấn đề này có 2 cách

1. Vào file Model Place ta thêm code sau để chuyển sang array:

protected $casts = [    'place_list_image' => 'array',];

2. Vào file Model Place ta thêm code sau để decode trường place_list_image:

public function getPlaceListImageAttribute($value){    return json_decode($value);}



Thứ Hai, 13 tháng 8, 2018

Tích hợp Bootstrap vào Laravel

SEO (Search Engine Optimization) không còn cái gì mới lạ với các quản trị viên hệ thống website và các lập trình viên ứng dụng web. Trong năm 2015, Google đã từng thông báo các website tuân thủ Responsive sẽ nhận được điểm chất lượng SEO tốt hơn (Response một thuật ngữ ám chỉ website đó có thể hiển thị tương thích trên tất cả các thiết bị với độ phân giải khác nhau). Lý do đơn giản là hiện nay tỉ lệ người dùng sử dụng smart phone, tablet… là khá lớn, nếu giữ website chỉ được thiết kế cho các máy tính cá nhân, các website này sẽ hoạt động không tốt trên các thiết bị thông minh.
Responsive website

Laravel HTML package viết mã HTML dễ dàng

Trong dự án, các tài nguyên như ảnh, các file css, javascript, font… được đặt trong thư mục public, để tổ chức tốt hơn chúng ta sẽ tạo ra các thư mục css, js, font chứa các loại file tương ứng. Khi tham chiếu đến các tài nguyên chúng ta có thể sử dụng ngôn ngữ HTML tiêu chuẩn hoặc có một tùy chọn nữa là sử dụng mã giả của gói Laravel HTML, ví dụ:
<img src="/images/logo.png" alt="All Laravel Logo" />

{!! HTML::image('images/logo.png', 'All Laravel Logo) !!}

Cài đặt gói Laravel HTML package

Đến thư mục gốc của dự án và sử dụng lệnh composer require để cài đặt gói Laravel HTML (tên chính xác là LaravelCollective). Ở các phiên bản Laravel 4.x gói này được cài đặt sẵn trong Laravel nhưng đến phiên bản Laravel 5.x gói này bị loại bỏ, muốn sử dụng phải cài đặt thêm.
c:\xampp\htdocs\laravel-test>composer require laravelcollective/html
Using version ^5.4 for laravelcollective/html
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing laravelcollective/html (v5.4.1): Downloading (100%)
Writing lock file
Generating autoload files
> Illuminate\Foundation\ComposerScripts::postUpdate
> php artisan optimize
Generating optimized class loader
The compiled services file has been removed.

Laravel Blade template module hóa trong thiết kế giao diện – Phần 2

Trong phần 1, chúng ta đã cùng nhau tìm hiểu các khái niệm cơ bản Laravel Blade, trong phần 2 này tiếp tục với kiểu cách lập trình trong Blade và cách thức tổ chức Blade template để tận dụng tối đa tính module trong phát triển presentation logic. OK, bắt đầu thôi.

Cấu trúc điều kiện trong Laravel Blade

Mục tiêu của Laravel Blade là để kế thừa và hiển thị dữ liệu, để thực hiện tốt hơn việc này, Laravel Blade cung cấp các lệnh tương tự như trong ngôn ngữ PHP thuần túy như các câu lệnh điều kiện, các vòng lặp…

Câu lệnh điều kiện if

Sử dụng các lệnh @if, @else, @elseif và @endif như trong PHP thuần túy, cú pháp sử dụng như sau:
@if (count($records) === 1)
    I have one record!
@elseif (count($records) > 1)
    I have multiple records!
@else
    I don't have any records!
@endif

Laravel Blade template module hóa trong thiết kế giao diện – Phần 1

https://allaravel.com/laravel-tutorials/laravel-blade-template-module-hoa-trong-thiet-ke-giao-dien-phan-1/

Laravel Blade là gì?

Mục tiêu chính của mô hình MVC là tách biệt giữa application logic và presentation logic, Laravel cũng vậy nó không muốn ở trong các view có các câu truy vấn hoặc các code không liên quan đến view, và không muốn các Controller, Model quan tâm đến định dạng dữ liệu. Tuy nhiên view cũng cần một số cú pháp đơn giản để đưa các logic vào trong nó, chính vì thế Laravel Blade ra đời. Blade rất đơn giản nhưng là một bộ máy tạo các mẫu web rất mạnh mẽ, không như các bộ máy tạo mẫu khác của PHP, Blade không hạn chế bạn sử dụng các mã PHP thuần túy trong view. Trong thực tế, tất cả các Blade view được biên dịch thành mã PHP thuần túy và được cache cho đến khi chúng có thay đổi. File Blade view có phần mở rộng là .blade.php và thông thường được lưu trong thư mục resources/views.

Kế thừa một template

Các lợi ích của Laravel Blade là kế thừa template và tính năng section, để bắt đầu chúng ta xem một ví dụ đơn giản sau:
Tạo một thư mục layouts trong thư mục resources/views để chứa các template, tiếp theo chúng ta tạo một blade view trong layouts với tên default.blade.php (resources/views/layouts/default.blade.php) có nội dung như sau:
<html>
    <head>
        <title>All Laravel - @yield('title')</title>
    </head>
    <body>

        @section('sidebar')
            Phần chính trong sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>

    </body>
</html>

Laravel view xây dựng logic trong giao diện

https://allaravel.com/laravel-tutorials/laravel-view-xay-dung-logic-trong-giao-dien/

Tìm hiểu về Laravel View

Trong mô hình MVC, V là chữ viết tắt của View. Nó giúp tách biệt giữa application logic và presentation logic giúp quản lý và phát triển mã nguồn tốt hơn. Các view trong Laravel được lưu trữ trong thư mục resources/views. Chúng ta có thể tạo thêm các thư mục trong thư mục resources/views để phân cấp quản lý, trong các ví dụ ở các bài viết trước chúng ta đã tạo thư mục fontend cho tất cả các view liên quan đến fontend, tạo thư mục backend cho các view liên quan đến quản trị. Bạn có thể tạo các thư mục con ở cấp sâu hơn, ví dụ:
  • resources/views/backend/product: Các view liên quan đến quản trị sản phẩm trên website.
  • resources/views/backend/news: Các view liên quan đến quản trị bài viết trên website.
Các view này có thể chứa mã HTML, CSS, Javascript phục vụ cho hiển thị nội dung cho người dùng.

Hướng dẫn Validate form động ở Laravel 5

Nếu bạn đã từng dùng thử hệ thông form validation của Laravel bạn sẽ thấy nó là 1 hệ thống rất mạnh mẽ. Nó làm những công việc quen thuộc, nhàm chán, khó khăn trở lên đơn giản nhưng vẫn hoạt động tốt.
Trong bài viết này tôi muốn chỉ cho các bạn các đơn giản và dễ dàng nhất để validate những form mà có chứa các input động. Trường hợp thông dụng là form mà cho phép user có thể add thêm hay remove các input trong form.
Đây là hình ảnh của 1 form mẫu như vây:
Trong form này khi người dùng click nút "add new" thì sẽ tạo thêm 1 ô textbox nữa, việc này sẽ được xử lý bằng Javascript và nó ngoài phạm vi của bài viết này.
Đây sẽ là phần code PHP demo cho form này
<input type="text" class="form-control" name="name" value="name">

@for ($i=0; $i < 2; $i++)
    <input type="text" name="items[{{ $i }}]" value="{{ $i }}">
@endforeach

Chủ Nhật, 12 tháng 8, 2018

Accessors và Mutators trong Laravel 5.3

https://viblo.asia/p/accessors-va-mutators-trong-laravel-53-rNkKxxjBKlm

Giới thiệu

Có rất nhiều lý do để người dùng lựa chọn sử dụng Eloquent và một trong những lý do đó là Eloquent hỗ trợ Accessors và Mutators. Nếu các bạn chưa nghe đến những cái tên này hay đã nghe qua mà chưa sử dụng thì cũng đừng lo lắng vì nó khá dễ hiểu, nhất là khi đọc qua bài viết của mình 😄 Accessors và Mutators là gì? Nó có nhiệm vụ là cho phép bạn format các attributes của Eloquent khi lấy ra từ một model hoặc là bạn cũng có thể set giá trị cho chúng. Tại sao phải làm vậy? Vì trong project của bạn, 1 thuộc tính có thể sẽ được sử dụng ở rất nhiều nơi, chẳng lẽ mỗi lần sử dụng bạn lại phải format nó. Giờ đây, việc cần làm là truy cập vào Model rồi viết 1 hàm set giá trị cho chúng, sau đó bạn chỉ cần gọi đến tên thuộc tính đó ở mọi nơi. Ví dụ thế này, bạn cần mã hóa mật khẩu cho người dùng khi truy cập vào trang web, thì việc bạn làm đơn giản là băm thuộc tính password rồi sau đó truy xuất nó từ bên trong Eloquent User model. Ngoài việc hỗ trợ tạo accessor và mutator riêng, Eloquent cũng tự động chuyển các trường date thành Carbon instance hoặc thậm chí chuyển trường text thành JSON.

Thứ Bảy, 11 tháng 8, 2018

Truy vấn và cập nhật json column trong Laravel

https://mattstauffer.com/blog/new-json-column-where-and-update-syntax-in-laravel-5-3/

Warning: This post is over a year old. I don't always update old posts with new information, so some of this information may be out of date.
While Laravel has had the ability to cast your data to and from JSON since version 5.0, it was previously just a convenience—your data was still just stored in a TEXT field. But MySQL 5.7 introduced an actual JSON column type.
Laravel 5.3 introduces a simple syntax for lookups and updates based on the value of specific keys in your JSON columns.

Laravel với MongoDB

Mở đầu Hello anh em, đến hẹn lại lên hôm nay mình xin chia sẻ với mọi người về chủ đề Laravel kết hợp với MongoDB mà thông thường ta hay ...