12/08/2018, 17:09

[Laravel 5.5] Laravel Helper với đối tượng là object, paths, Strings

Bài viết lần trước mình có viết về các function có trong helper có sẵn của laravel 5.5 với đối tượng là mảng. Bài viết lần này, mình sẽ tiếp tục giới thiệu về các function helper liên quan đến các đối tượng khác (object, paths, string) Bài viết này là bài viết mình vừa viết, vừa dịch, vừa học ...

  • Bài viết lần trước mình có viết về các function có trong helper có sẵn của laravel 5.5 với đối tượng là mảng.
  • Bài viết lần này, mình sẽ tiếp tục giới thiệu về các function helper liên quan đến các đối tượng khác (object, paths, string)
  • Bài viết này là bài viết mình vừa viết, vừa dịch, vừa học tập thêm, để sử dụng dần vào công việc hiện tại. Có khá là nhiều bài viết rất chi tiết và khá tốt, các bạn có thể đọc thêm tại đây.
  1. data_fill()
  • Chức năng: gán giá trị trong một mảng nhiều chiều, hoặc các object, sử dụng "dot" (dấu '.')
  • Theo mình hiểu, hàm này sẽ gán các giá trị chưa có, với các key chưa được gán giá trị, thì dùng hàm này được. Với những key đã có giá trị thì không set lại giá trị cho key đó được.
    $data = ['products' => ['desk' => ['price' => 100]]];
    
    // Thử set lại giá trị price 
    data_fill($data, 'products.desk.price', 200);
    // Kết quả nhận được là key price không thay đổi 
    ['products' => ['desk' => ['price' => 100]]]
    // Set một giá trị key khác trong $data
    data_fill($data, 'products.desk.discount', 10);
    ['products' => ['desk' => ['price' => 100, 'discount' => 10]]]
    
  • data_fill() cũng cho phép việc gán các giá trị mới theo diện rộng, sử dụng dấu * , nó cũng phần nào có ý nghĩa tương tự như dấu * trong linux.
    $data = [
        'products' => [
            ['name' => 'Desk 1', 'price' => 100],
            ['name' => 'Desk 2'],
        ],
    ];
    
    data_fill($data, 'products.*.price', 200);
    
    /*
        [
            'products' => [
                ['name' => 'Desk 1', 'price' => 100],
                ['name' => 'Desk 2', 'price' => 200],
            ],
        ]
    */
    
  1. data_get()
  • Chức năng: Lấy giá trị từ một mảng nhiều chiều (có thể gọi là mảng đa chiều, mảng lồng mảng, nguyên gốc của từ nested array, nhưng mình hiểu là mảng đa chiều, không biết có đúng hay không), hoặc object, sử dụng kí hiệu "dot" (dấu chấm ) .
    $data = ['products' => ['desk' => ['price' => 100]]];
    
    $price = data_get($data, 'products.desk.price');
    
    // 100
    
  • data_get() cũng cho phép ta gán giá trị mặc định trong trowngf hợp khong có giá trị nào được trả về hoặc key truyền vào không tồn tại.
    $discount = data_get($data, 'products.desk.discount', 0);
    
    // 0
    
  1. data_set()
  • Chức năng: Gán giá trị , một giá trị trong một nested array hoặc object sử dụng ký hiệu "dot".
  • Nó khác với data_fill() ở chỗ, data_fill() chỉ điền những giá trị còn trống trong object, nested array, các key đã gán giá trị thì không thể thay đổi được, còn với set thì đặt lại giá trị của một key, bất kể là nó được set trước đó hay chưa.
    $data = ['products' => ['desk' => ['price' => 100]]];
    
    data_fill($data, 'products.desk.price', 200);
     ['products' => ['desk' => ['price' => 100]]]
    // Không thay đổi được giá trị 
    
    data_set($data, 'products.desk.price', 200);
    
    // ['products' => ['desk' => ['price' => 200]]]
    // Thay đổi được giá trị
    
  • Giống như data_fill(), data_set() cho phép dùng dấu * để gán giá trị cho một key ở diện rộng.
        $data = [
            'products' => [
                ['name' => 'Desk 1', 'price' => 100],
                ['name' => 'Desk 2', 'price' => 150],
            ],
        ];
    
    data_set($data, 'products.*.price', 200);
    
    /*
        [
            'products' => [
                ['name' => 'Desk 1', 'price' => 200],
                ['name' => 'Desk 2', 'price' => 200],
            ],
        ]
    */
    
  • Trong trường hợp, nếu không muốn ghi đè lên giá trị mà key đã tồn tại trước đó, data_set() cũng có cơ chế giúp làm việc này với tham số thứ ba là false.
    $data = ['products' => ['desk' => ['price' => 100]]];
    
    data_set($data, 'products.desk.price', 200, false);
    
    // ['products' => ['desk' => ['price' => 100]]]
    
  1. app_path()
    • app_path() trả về đường dẫn đầy đủ đến thư mục app. Có thể sử dụng app_path để tạo ra những đường dẫn đến các file trong thư mục app.
    $path = app_path();
    // /home/tran.van.nhat/workspaces/demo-app/app"
    $path = app_path('Http/Controllers/Controller.php');
    // /home/tran.van.nhat/workspaces/demo-app/app/Http/Controllers/Controller.php
    
  2. base_path()
    • base_path trả về đường dẫn đầy đủ đến thư mục root của project. Tương tự, chúng ta có thể sử dụng base_path để tạo ra những đường dẫn đến các thư mục hoặc các file trong project
    $path = base_path()
    // home/tran.van.nhat/workspaces/demo-app/
    $path = base_path('vendor/bin');
    // home/tran.van.nhat/workspaces/demo-app/vendor/bin/
    
  3. config_path()
    • config_path() trả về đường dẫn đầy đủ của thư mục config. Tương tự cũng sử dụng để tạo ra các thư mục và file con trong thư mục config. (tương tự hai hàm trên nhưng khác thư mục, nên từ giờ đến cuối mình sẽ không để code ví dụ nữa)
  4. database_path()
    • database_path() trả về đường dẫn đầy đủ của thư mục database
  5. mix()
    • mix() về cơ bản nó cũng trả về đường dẫn, tuy nhiên không phải mục nào cụ thể cả. Mình sẽ viết rõ về mix của laravel sau. Có thể tham khảo trước tại đây (EN version)
  6. public_path()
    • public_path() trả về đường dẫn đầy đủ đến thư mục public
  7. resource_path()
    • resource_path() trả về đường dẫn đầy đủ đến thư mục resources
  8. storage_path()
    • storage_path() trả về đường dẫn đầy đủ đến thư mục storage
  1. __()
    • __() thực hiện việc đa ngôn ngữ, trả về giá trị của key trong ngôn ngữ tương ứng. Trong trường hợp key không định nghĩa text tương ứng với localization, sẽ trả về giá trị key. Tham khảo thêm về localization (EN version). Mình sẽ viết thêm về phần đa ngôn ngữ này sau.
  2. camel_case()
    • camel_case() trả về string theo định dạng camelCase của string truyền vào.
    camel_case('this is example'); 
    // thisIsExample
    
  3. class_basename()
    • class_basename() trả về tên của class, namespace sẽ được loại bỏ.
    class_basename('FooBarBaz');
    // Baz 
    
  4. e()
    • e() trả về htmlentities trên một chuỗi
    echo e('<html>foo</html>');
    
    // &lt;html&gt;foo&lt;/html&gt;
    
  5. ends_with()
    • ends_with cho biết nếu một chuỗi kết thúc bằng một chuỗi con hay không
    $result = ends_with('This is my name', 'name');
    
    // true
    
  6. kebab_case()
    • kebab_case() trả về string theo định dang kebab-case
    $converted = kebab_case('fooBar');
    
    // foo-bar
    
  7. preg_replace_array()
    • preg_replace_array thay thế một patterm trong chuỗi bởi một mảng
    $string = 'The event will take place between :start and :end';
    
    $replaced = preg_replace_array('/:[a-z_]+/', ['8:30', '9:00'], $string);
    
    // The event will take place between 8:30 and 9
    
  8. snake_case()
    • snake_case(), trả về string theo định dạng snake_case, nhớ hồi PEP8 quá.             </div>
            
            <div class=
0