Nói màu sắc trong lập trình
Bạn bị nhầm rồi! Ngoài việc style màu bằng mã hexa thì CSS hỗ trợ sử dụng theo tên màu đã được quy ước trước hay nó còn được gọi là Predefined/Cross-browser color names. Trong danh sách tên màu này thì chỉ có một cái tên là chocolate
chứ không có chocolate1
hay chocolate2
đâu nhé! Do đó các giá trị chocolate1
, chocolate2
là không hợp lệ và trình duyệt sẽ không hiểu đó là màu nào.
Bạn có thể kiểm tra và tham khảo trong danh sách tên màu được các trình duyệt hỗ trợ ở đây nha: https://www.w3schools.com/colors/colors_names.asp
Chuyển volumnes_from từ docker-compose ver 2 sang ver 3.
Nếu muốn share data giữa các services bạn khai báo volumes ở top-level, như sau:
version: '3'
volumes:
backend:
services:
...
Bây giờ muốn dùng nó ở services thì bạn mount qua volumes
trong service. Ví dụ:
version: '3'
volumes:
backend:
services:
application:
container_name: project_application
image: debian
volumes:
- backend:/var/www/project/backend
workspace:
container_name: project_workspace
restart: always
build:
context: .
dockerfile: ./docker/workspace/build/Dockerfile
volumes:
- backend:/var/www/project/backend
tty: true
Sub-domain cho Laravel
- Bạn trỏ toàn bộ sub domain (hoặc là chỉ m.example.com) về chung host của thằng example.com
- Bạn thêm
ServerAlias
cho cái example.com vào trong cấu hình apache của nó, để bất cứ request tới sub-domain sẽ đều vào web example.com (mình đoán bạn đang dùng Apache):
ServerAlias m.example.com
# Hoặc chấp nhận bất kỳ sub-domain nào:
ServerAlias *.example.com
- Khi đảm bảo 2 bước trên thì việc còn lại là laravel xử lý như bạn đang làm và web sẽ hiện ra như bạn đang kỳ vọng.
Build nền tảng cho Docker Container như thế nào cho hợp lý :-?
Bạn nói đúng rồi đấy bạn. Mình cũng không biết là lý do gì. Cá nhân mình suy đoán như sau:
- Có thể là do hồi đấy (3 năm trước), repo này được dùng nhằm phục vụ việc trainning và chia sẻ kiến thức về docker, vì khi đó có thể Docker ở Framgia có thể còn khá mới lạ và ít project sử dụng. Để ubuntu nó thân quen sẽ dễ hình dung hơn.
- Có thể do team trong Framgia thích dùng ubuntu nên tác giả đã base trên ubuntu luôn chẳng hạn. Vì thói quen của tác giả lúc đấy đang quen code trên ubuntu, khi viết Dockerfile thì các lệnh setup như cài đặt phần mềm sẽ không bị thay đổi nên dễ/tiện setup hơn. VD:
# Ubuntu
apt-get install git
# Alpine
apk add git
- Ngoài ra, repository kia đã lâu rồi không còn thấy được contribute nên có thể tác giả cũng quên luôn việc optimize nó.
Vuejs option delay,timeout trong Async component không hoạt động
@stone89son Ý bạn đang hỏi về cái syntax này à:
const AsyncComponent = () => ({
// The component to load (should be a Promise)
component: import('./MyComponent.vue'),
// A component to use while the async component is loading
loading: LoadingComponent,
// A component to use if the load fails
error: ErrorComponent,
// Delay before showing the loading component. Default: 200ms.
delay: 200,
// The error component will be displayed if a timeout is
// provided and exceeded. Default: Infinity.
timeout: 3000
})
Có vẻ bạn đang hiểu nhầm rồi, syntax kia (delay
+ timeout
) là để xử lý việc hiển thị cái LoadingComponent
và ErrorComponent
thôi. Còn muốn dùng async thì cái property component
bạn return một cái promise là được. Do là promise nên bạn thích set timeout bao nhiêu giây rồi mới resolve cũng được hết á.
Cách sử dụng cURL CURLOPT_COOKIEJAR với Laravel Storage
Có vẻ vẫn là câu hỏi lần trước của bạn.
Mình nghĩ sau khi gửi request đăng nhập đi, nếu thành công bạn có thể lấy cookie trong header của response ra rồi lưu vào session phía bên web của bạn cũng được. Lần request tiếp theo bạn đọc từ session ra thôi. Mọi thứ cũng có vẻ đơn giản hơn.
Không liên quan lắm, nhưng mình nghĩ bạn dùng package GuzzleHttp để gửi request cho code nó dễ đọc hơn.
cURL php không gửi được request thứ 2 sau khi request login thành công
Mình đoán trường hợp của bạn, cái một trong 2 API của bạn nó là stateless API không có session. Do đó 2 request của bạn sẽ độc lập với nhau và không có căn cứ nào để server nó biết được là bạn đã đăng nhập ở request sau.
- Nếu API login trả về không trả về accessToken, khả năng nó đang dùng session còn cái API thứ 2 nó là stateless chỉ dùng accessToken hoặc apiKey nên session sẽ bị vô tác dụng. Do đó request thứ 2 cho rằng bạn chưa đăng nhập.
- Ngược lại thì API login có thể là stateless. Nếu giả định của mình đúng thì thường người ta sẽ cho response trả về chứa accessToken hoặc apiKey hoặc cái gì khác... để chứng mình rằng bạn đã đăng nhập. Bạn chỉ cần thêm cái accessToken hoặc apiKey vào header của request thứ 2 (header hay dùng là
Authorization
phụ thuộc vào server dùng như nào).
Ngoài ra, nếu cả hai request đều dùng session để chứng minh bạn đã đăng nhập, thì ở request thứ 2, bạn cần gửi thêm cookie lên kèm. Cookie là bằng chứng đề server biết rằng bạn đã đăng nhập.
Bắt đầu học lavarel cần những gì?
Nếu bạn đang theo học PHP, bạn hãy cố gắng nắm vững các kiến thức cơ bản của ngôn ngữ lập trình này. Sử dụng biến, các toán tử, các câu lệnh rẽ nhánh, các kiến thức cơ bản về HTML, CSS, xử lý form.. thật nhuần nhuyễn. Sau đó bạn nắm các kiến thức về OOP, rồi chuyển qua nghiên cứu cái mô hình MVC để hiểu luồng chạy của hệ thống khi nhập một URL trên trình duyệt. Sau khi nắm các kiến thức trên rồi thì bạn nhảy vô đọc document của Laravel và chiến thôi .
Regex number in Javascript
Bạn thử Regex này xem?
- Kiểm tra chuỗi là số:
/^\d+(?:.\d+)?$/
VD: 0.388
- Kiểm tra trong một chuỗi có chứa số không:
/(\d+(?:.\d+)?)/
VD: "Hôm nay tôi trúng thưởng xổ số 50.000.000" => Số lấy ra theo regex: 50.000.000
- Nếu số nhập có thể là số âm thì thêm
(?:\+|\-)
:
1. /^(\+|\-)?\d+(?:.\d+)?$/
2. /((?:\+|\-)?\d+(?:.\d+)?)/
Làm thế nào để lấy lại mật khẩu của tài khoản Viblo?
Bạn truy cập trang này https://viblo.asia/password/reset bằng trình duyệt ở chế độ ẩn danh rồi nhập email để nhận mã khôi phục mật khẩu nhé.
Hỏi về cấu trúc xử lý trong vuejs
Cái form của bạn @luatvd có thể cải tiến làm như sau để dùng chung cho cả create và update
<template>
<div>
<label for="postname">Name</label>
<input v-model="form.postName" placeholder="post name" id="postname" class="form-control">
<label for="description">Description</label>
<textarea v-model="form.description" cols="30" rows="10" class="form-control" id="description"></textarea>
<button @click="$emit('submit', form)">Submit</button>
</div>
</template>
<script>
import _get from 'lodash/get'
export default {
props: {
post: {
type: Object,
default: () => null
}
}
data() {
return {
form: {
name: _get(this.post, 'name', ''),
description: _get(this.post, 'name', ''),
...
}
}
}
}
</script>
Như bạn thấy:
- Trong form mình truyền
post
vào, nếupost
không có thì default value lànull
. - Lúc data của component được khởi tạo, mình sẽ gán giá trị từ prop
post
(nếu có) vàoform
trong component state. - Khi nhấn submit thì mình bắn event
submit
ra cho component, với parametter là dữ liệu của biếnform
trong state. - Component cha sẽ listen cái event submit và thực hiện làm hành động gì đó như create, update.
Mình cần giúp đỡ fix css
Bạn dùng thử Flex box đi bạn hoặc bạn search từ khóa Equal height columns xem các giải pháp khác ngoài flexbox. Giải pháp này làm tất cả các item trong grid sẽ tự động có chiều cao bằng nhau theo item có height lớn nhất. Bạn nên xem mẫu style sau với flex box trước.
Render data with Remarkable Plugin in Laravel
Dùng Viblo SDK JS đi bạn, trong SDK có public bộ render Markdown của Viblo. Đầu vào của bạn chỉ cần là text viết theo cú pháp Markdown, đầu ra sẽ là HTML. ^^ Server chỉ cần in mã markdown ra một thẻ div chẳng hạn, rồi client sẽ dùng javascript để đọc markdown từ thẻ đấy rồi render ra HTML với Viblo SDK-JS. Hoặc cùng lắm thì dùng Node.js làm server side rendering, sẽ có thể sử dụng SDK-JS của Viblo để render markdown trên trực tiếp trên server side luôn thay vì dùng js dưới client để render.
Mời bạn tham khảo tạ Viblo SDK JS tại: https://viblo.asia/tools
Hỏi về regex
Mình thấy string trong Ruby cũng có hàm split như trên javascript, bạn thử dùng cách của mình ở trên xem sao?
expression = "ROUND(SUM(F9:I9)/2,0)"
elements = expression.split(/(\(|\)|\:|\/)/)
Update Database khi trang web đang chạy ở host
Chỉnh sửa lại cấu trúc DB trong Laravel thì cứ migration mà táng thôi bạn. Bạn dùng git chứ? Sử dụng git rồi checkout code hiện tại ở master ra một branch khác, bạn sửa code trên branch đấy sao cho web hoạt động bình thường, không bị lỗi. Dữ liệu cũ vẫn được đảm bảo tồn tại và tương thích trên cấu trúc mới. Sau tất cả, chỉ cần merge branch này về master và thực hiện deploy thôi.
Còn nếu web nhỏ, chỉ deploy trên hosting thì ở bước deploy, bạn phải làm sửa cấu trúc thủ công thôi. Chuyển web về chế độ maintain mode, download cái database đó về, sau đó migrate ở local. Xong đâu đấy thì upload code mới lên, import database mới và tắt chế độ maintain mode.
Sự khác nhau khi gọi hàm thực thi trong ComponentWillMount và hàm setState()
Dấu ()
tức để để thực hiện luôn cái funciton đấy. Vì cái argument thứ 2 của setState
nó nhận một function callback, callback này được chạy trong setState. Chính vì thế lúc này mình không có dấu ()
để callback không chạy trước khi setState chạy.
Làm sao để xoá post trong viblo
Bạn edit bài đấy thành "Draft" rồi quay lại trang "My Contents" sẽ thấy nút xóa hiện ra ngay bên dưới tiêu đề bài viết.
Tham chiếu id trong Database?
Đây là kiến thức cơ bản nhất của web bạn cần nắm vững. Bạn có thể chuyển dữ liệu sang trang khác bằng một số cách sau:
- Query String trên URL
Cấu trúc dạng như sau:
https://viblo.asia/votelist.html?variable_1=value&variable_2=value
Các này thì tên biến và giá trị của biến được hiển thị ngay trên thanh địa chỉ của trình duyệt. Người khác dễ dàng thấy bạn gửi những gì tới trang đấy.
VD: Truyền biến page
có giá trị bằng 2
tới trang chủ của Viblo:
https://viblo.asia/?page=2
- Form data; JSON data
Với form data, bạn thực hiện method POST để gửi dữ liệu đi. Query String vẫn hoạt động đồng thời trong trường hợp này. Dữ liệu gửi đi bằng POST, PUT sẽ được đóng gói trong Request body, và được mã hóa lại nếu dùng HTTPS. Do đó, người khác khó thấy bạn gửi những gì đi nên sẽ bảo mật hơn.
Thay thế thẻ html bằng 1 component vuejs
Bạn thử tách cái CKEditor thành một component riêng, có một method để get dữ liệu, hoặc emit một event khi dữ liệu bị sửa đổi.
Sau đó dùng v-if="editing"
. Ô nào click sửa thì editing = true
, editor mới render và hiện ra cho phép sửa.
<table-cell>
<ck-editor v-if="editing" :value="contents" @change="onChange"/>
</table-cell>
Node js kết nối mysql
Bạn thử cách này xem, mình vừa google được:
Execute the following query in MYSQL Workbench, try connecting using node after you do so:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'