ਬਿਨਾਂ ਗੁੰਝਲਦਾਰ ਕੋਡ ਦੇ ਐਡਮਿਨ-ਐਡੀਟੇਬਲ ਸੈਟਿੰਗਾਂ

ਐਪਸ ਨੂੰ ਲਗਾਤਾਰ ਇੱਕ ਸਮੱਸਿਆ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈਂਦਾ ਹੈ। ਕੁਝ ਸੈਟਿੰਗਾਂ .env ਫਾਈਲ ਵਿੱਚ ਹੋਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ। ਹੋਰ ਸੈਟਿੰਗਾਂ ਨੂੰ ਨਵੇਂ ਕੋਡ ਡਿਪਲਾਈ (deploy) ਤੋਂ ਬਿਨਾਂ ਐਡਮਿਨ ਪੈਨਲ ਰਾਹੀਂ ਬਦਲਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਉਦਾਹਰਣਾਂ ਵਿੱਚ ਸਾਈਟ ਦੇ ਨਾਮ, ਟਾਈਮਜ਼ੋਨ, ਜਾਂ ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਸੈਟਿੰਗਾਂ ਸ਼ਾਮਲ ਹਨ।

ਬਹੁਤ ਸਾਰੇ ਡਿਵੈਲਪਰ ਇਹਨਾਂ ਨੂੰ ਡਾਟਾਬੇਸ ਵਿੱਚ ਸਟੋਰ ਕਰਦੇ ਹਨ ਪਰ ਇਸ ਨਾਲ ਗੜਬੜ ਹੋ ਜਾਂਦੀ ਹੈ। ਅੰਤ ਵਿੱਚ ਤੁਹਾਡੇ ਕੋਲ ਡਾਟਾ ਪੜ੍ਹਨ ਦੇ ਦੋ ਤਰੀਕੇ ਰਹਿ ਜਾਂਦੇ ਹਨ। ਤੁਹਾਡੀ ਐਪ ਦਾ ਇੱਕ ਹਿੱਸਾ config() ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਜਦੋਂ ਕਿ ਦੂਜਾ ਡਾਟਾਬੇਸ ਮਾਡਲ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਇਸ ਨਾਲ ਅਜਿਹੇ ਬੱਗ (bugs) ਪੈਦਾ ਹੁੰਦੇ ਹਨ ਜਿੱਥੇ ਸੈਟਿੰਗਾਂ ਅਸੰਗਤ (inconsistent) ਹੋ ਜਾਂਦੀਆਂ ਹਨ।

ਤੁਸੀਂ ਇੱਕ ਸਿੰਗਲ ਰੀਡ ਪਾਥ (single read path) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਸ ਤੋਂ ਬਚ ਸਕਦੇ ਹੋ। ਡਾਟਾਬੇਸ ਨੂੰ ਇੱਕ ਅਜਿਹੇ ਲੇਅਰ ਵਜੋਂ ਮੰਨੋ ਜੋ ਬੂਟ (boot) ਸਮੇਂ ਤੁਹਾਡੇ config ਉੱਤੇ ਲੇਅਰ ਵਜੋਂ ਕੰਮ ਕਰਦਾ ਹੈ।

ਇਸ ਨੂੰ ਬਣਾਉਣ ਦਾ ਤਰੀਕਾ ਇੱਥੇ ਦਿੱਤਾ ਗਿਆ ਹੈ:

• ਇੱਕ ਸਿੰਗਲ ਸੋਰਸ ਆਫ ਟ੍ਰੂਥ (single source of truth) ਦੀ ਵਰਤੋਂ ਕਰੋ। ਡਾਟਾਬੇਸ ਵੈਲਯੂ ਨੂੰ ਰੱਖਦਾ ਹੈ, ਪਰ ਐਪਲੀਕੇਸ਼ਨ ਸਿਰਫ਼ config() ਰਾਹੀਂ ਹੀ ਪੜ੍ਹਦੀ ਹੈ। • ਟਾਈਪਡ ਕਲਾਸਾਂ (typed classes) ਦੀ ਵਰਤੋਂ ਕਰੋ। ਲੂਜ਼ ਐਰੇਅਜ਼ (loose arrays) ਦੀ ਬਜਾਏ, ਸਖ਼ਤ ਟਾਈਪਾਂ ਵਾਲੀਆਂ ਕਲਾਸਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਟਾਈਪੋ (typos) ਅਤੇ ਚੁੱਪਚਾਪ ਹੋਣ ਵਾਲੀਆਂ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕਦਾ ਹੈ। • ਬੂਟ ਪ੍ਰਕਿਰਿਆ (boot process) ਦੌਰਾਨ ਸੈਟਿੰਗਾਂ ਲੋਡ ਕਰੋ। ਡਾਟਾਬੇਸ ਵੈਲਯੂਜ਼ ਨੂੰ ਕੱਢਣ ਅਤੇ ਉਹਨਾਂ ਨੂੰ config ਐਰੇ ਵਿੱਚ ਪਾਉਣ ਲਈ ਇੱਕ ਸਰਵਿਸ ਪ੍ਰੋਵਾਈਡਰ ਦੀ ਵਰਤੋਂ ਕਰੋ।

ਇਹਨਾਂ ਦੋ ਤਕਨੀਕੀ ਜਾਲਾਂ ਤੋਂ ਸਾਵਧਾਨ ਰਹੋ:

  1. The Timezone Trap Laravel ਬੂਟ ਪ੍ਰਕਿਰਿਆ ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ ਹੀ ਟਾਈਮਜ਼ੋਨ ਸੈੱਟ ਕਰ ਦਿੰਦਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਬਾਅਦ ਵਿੱਚ config ਵੈਲਯੂ ਬਦਲਦੇ ਹੋ, ਤਾਂ PHP ਅਜੇ ਵੀ ਪੁਰਾਣਾ ਟਾਈਮਜ਼ੋਨ ਹੀ ਵਰਤਦਾ ਹੈ। ਆਪਣੇ ਨਵੇਂ config ਵੈਲਯੂ ਨਾਲ ਗਲੋਬਲ PHP ਸੈਟਿੰਗ ਨੂੰ ਸਿੰਕ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਮੈਨੂਅਲੀ date_default_timezone_set() ਨੂੰ ਕਾਲ ਕਰਨਾ ਪਵੇਗਾ।

  2. The Fresh Install Trap ਇੱਕ ਨਵੀਂ ਐਪ ਵਿੱਚ ਕੋਈ ਡਾਟਾਬੇਸ ਟੇਬਲ ਨਹੀਂ ਹੁੰਦਾ। ਜੇਕਰ ਸੈਟਿੰਗਜ਼ ਟੇਬਲ ਨਾ ਹੋਣ ਕਾਰਨ ਤੁਹਾਡੀ ਬੂਟ ਪ੍ਰਕਿਰਿਆ ਫੇਲ ਹੋ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਐਪ ਸ਼ੁਰੂ ਨਹੀਂ ਹੋਵੇਗੀ। ਜੇਕਰ ਐਪ ਬੂਟ ਹੋਣ ਵਿੱਚ ਫੇਲ ਹੋ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਤੁਸੀਂ migrations ਨਹੀਂ ਚਲਾ ਸਕਦੇ। ਆਪਣੇ ਸੈਟਿੰਗਜ਼ ਲੋਜਿਕ ਨੂੰ try/catch ਬਲਾਕ ਵਿੱਚ ਰੱਖੋ। ਇਹ ਐਪ ਨੂੰ ਉਦੋਂ ਤੱਕ .env ਡਿਫੌਲਟਸ 'ਤੇ ਵਾਪਸ ਜਾਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ migrations ਨਹੀਂ ਚਲਾ ਲੈਂਦੇ।

ਸੁਰੱਖਿਆ ਲਈ ਇੱਕ ਹੋਰ ਟਿਪ: ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਵਰਗੀ ਫੀਚਰ ਨੂੰ ਡਿਸੇਬਲ ਕਰਦੇ ਸਮੇਂ, ਸਿਰਫ਼ UI ਵਿੱਚ ਬਟਨ ਨੂੰ ਨਾ ਛੁਪਾਓ। ਫੀਚਰ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ config ਤੋਂ ਹਟਾ ਦਿਓ। ਜੇਕਰ ਤੁਸੀਂ config ਤੋਂ ਫੀਚਰ ਹਟਾ ਦਿੰਦੇ ਹੋ, ਤਾਂ routes ਗਾਇਬ ਹੋ ਜਾਂਦੇ ਹਨ। ਇੱਕ ਲਾਈਵ ਐਂਡਪੁਆਇੰਟ ਵਾਲਾ ਛੁਪਿਆ ਹੋਇਆ ਫਾਰਮ ਸੁਰੱਖਿਆ ਲਈ ਖਤਰਾ ਹੈ। ਇੱਕ ਗਾਇਬ ਰੂਟ 404 ਰਿਟਰਨ ਕਰਦਾ ਹੈ।

ਆਪਣੇ ਕੋਡ ਨੂੰ ਸਰਲ ਰੱਖੋ। ਤੁਹਾਡੇ controllers ਅਤੇ views ਨੂੰ ਇਹ ਨਹੀਂ ਪਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਕਿ ਕੋਈ ਸੈਟਿੰਗ ਫਾਈਲ ਤੋਂ ਆਈ ਹੈ ਜਾਂ ਡਾਟਾਬੇਸ ਤੋਂ। ਉਹਨਾਂ ਨੂੰ ਸਿਰਫ਼ config() ਹੀ ਦਿਖਾਈ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ।

Source: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0