ארכיון תגיות: laravel

להוציא את המשתמש אוטומטית לאחר זמן מה ללא פעילות ( jquery plugin inactivity )

באפליקציות אינטרנט שמצריכות כניסה – יש עניין שבצד השרת – מנוהל לרוב Session

ולא נרצה שהמשתמש ישאיר את התוכנה פתוחה ואולי משתמש אחר יגיע למחשב וישתמש בתוכנה בשמו של הראשון, ללא ידיעתו.

כדי לתת מענה לכך – אז בפריימוורקים של צד שרת , בדרך כלל אפשר לזהות אם פג תוקף ה- Session ואז לעשות redirect למשתמש.

אבל במקרה של שימוש ב- Ajax או אפליקציה שבנויה עם פרייוורק JS, צריך פתרון גם ברמת צד הלקוח.

יש הרבה פתרונות JS

אני מצאתי שהתוסף הבא ל- Jquery הכי נוח.

קישור לתוסף ב- Githut

קוד להמחשה ( במצב פרודקשיין, אולי כדאי לעשות קריאת אגקס לשרת, לבדוק אם ה Session בתוקף, אבל הקוד יעבוד היטב גם בלי זה )

הערה : השורה הראשונה מושכת את הסקריפט, אני עובד עם Laravel בצד שרת, ולכן הפקודה asset – וסימני הסוגרים המסולסלים ( כנ"ל בשורה האחרונה ) .

<!-- jquery inactivity -->
<script src="{{ asset('js/jquery-inactivity/jquery.inactivity.min.js') }}">



</script>
<script>
    // https://github.com/afklondon/jquery.inactivity
    $(document).inactivity( {
        interval: 1800000, // the timeout until the inactivity event fire [default: 3000]
        mouse: true, // listen for mouse inactivity [default: true]
        keyboard: true, // listen for keyboard inactivity [default: true]
        touch: true, // listen for touch inactivity [default: true]
        customEvents: "", // listen for custom events [default: ""]
        triggerAll: false , // if set to false only the first "activity" event will be fired [default: false]
    });
    $(document).on("inactivity", function(){
        // function that fires on inactivity
        console.log('loged out beacuse of inactivity');
        window.location = "{{ route('logout') }}";
    });


</script>

 

חיבור דינמי לדאטאבייסים רבים ב-Laravel

יש לי פרויקט שבו לכל יוזר יש דאטאבייס משלו.
עכשיו, תוך כדי ריצה, אני צריך להתחבר לדאטאבייס הנכון.
הפרויקט הוא על Laravel ( כיום 5).

אז השלב הראשון לפתרון העניין, הוא הוספה דינמית של הגדרה.
כלומר – כידוע, בדרך כלל ההגדרות של הדאטאבייסים ב-Laravel יושבות במערך שמוגדר בקובץ database.php בתיקית config.

עכשיו, כיוון שזאת הגדרה לכל דבר ועניין, אז laravel מאפשרת להוסיף הגדרות דינמיות , באמצעות המתודה Config::set.

אז ככה אני מגדיר דאטאבייס חדש , מה שנקרא "on the fly", כלומר תוך כדי ריצה :

 Config::set('database.connections.'.'YOUR KEY COME HERE', array(
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => $this->dbName,
            'username'  => env('DB_USERNAME', 'root'),
            'password'  => env('DB_PASSWORD', 'YOUR PASSWORD COME HERE'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
                     ));

נא תשומת לב למספר נקודות :
1. השתמשתי ב-dot.notation, כלומר בתחביר של נקודה מפרידה, ו-Laravel יודעת להפריד אותו לבד.
2. המקום שבו סימנתי Your key come here – מיועד כמובן, כדי לתת שם יחודי ל-Connection הזה.

ועכשיו, אחרי שהגדרנו –
אז נשאר לבצע שאילתות.
אני אדגים על שאילתא בצורה גולמית, בלי להתייחס במאמר הזה ל-Eloquoent בינתיים.
אז נניח ואני רוצה לבצע שאילתת select על טבלת users באותו דאטאבייס שאליו התחברתי :
זה הולך ככה :

 $results = DB::connection($user->id)->select('select * from users where id > ?', [0]);

זהו, ראינו כאן איך להתחבר באופן דינמי לדאטאבייסים ב-laravel.
יום נעים
איל

16824283970_515f904232_laravel

המשך מדריך – עבודה בלאראוול עם דאטאבייסים רבים – שיתוף מודל Laravel Mulitiple Databases – Share your models

laravel share your model
Photo by nesimo

בהמשך למדריך הקודם – שבו הראתי איך מתחברים לדאטבייסים שונים, תוך כדי ריצה (on the fly).

עכשיו החלק הבא – הוא לראות איך יוצרים מודל אחד – אבל משתמשים בו בדאטאבייסים שרלוונטי באותו רגע ליוזר.

אז ב-Laravel זה ממש פשוט.

אחת המתודות של המודל שאפשר לשרשר, היא on והיא קובעת לאיזה דאטאבייס מתייחסים , פשוט עם שם הדאטאבייס הרלוונטי.

אז יוצרים את המודל – לגמרי כרגיל.

וניגשים אליו , נניח עם count , בצורה הבאה :

 $results = AppPolicy::on($user->id)->where('PolicyInitialNum', '>', 0)->count();

בדוגמא שהבאתי המודל נקרא כמובן Policy.
ובאותה צורה אפשר לגשת לכל מודל שרוצים.

בהצלחה!

איך להחזיר ב-Laravel רשימה עבור select במהירות ?

פעמים רבות, כאשר אנו יוצרים טופס HTML, צריך לשלוף רשימה מתוך טבלה ב-DB ולשים אותה בתוך select בטופס ה-HTML.
כאשר פעמים רבות, לכל ערך יש מפתח בטבלה, ואותו נרשום ב-select בתור ה-value.
ב-laravel יש צורה ממש פשוטה לעשות זאת, הן ישירות על הדאטאבייס והן עם מודל של Eloquent .

ישירות מהדאטאבייס :

DB::table('foo')->list('name','value');

ועל מודל של Eloquent זה עובד דומה, אבל משום מה המתודה מסתיימת ב-S

להלן דוגמא מפרויקט שלי על מודל של Eloquent :

AppJob::where('company','=',$company->company)->lists('job','id');

מה שזה מחזיר – זה מחזיר בכל מקרה מערך רגיל, כשהמפתח הוא עמודת המפתח שציינו, והערך – הוא עמודת הערך.

 

אז כדי ליישם את זה בתבנית של Blade זה נראה כך


                        @foreach($list as $key => $value)
                            
                        @endforeach
                  

איך לשנות את מבנה התיקיות ב-Laravel

כשעובדים עם Laravel

ורוצים להסתיר את כל תיקיות האפליקציה

ורוצים נניח שלא יופיע בכתובת התיקיה public

אפשר לעשות זאת כך :

2 שלבים:

שינויים שצריך לעשות בקובץ index.php בתוך תיקית public

קודם כל תעתיקו את תוכן תיקית public למיקום שבו אתם רוצים שקובץ ה-index יופעל

נניח אם רוצים שהוא יופעל מהדומיין עצמו, בלי תת-תיקיה

אז נעתיק את תוכן התיקיה public אל /var/www (זה משתנה משרת לשרת, למשל ב-cpanel זה נקרא public_html).

 

אחרי שהעתקנו , נערוך את index.php

נשנה את 2 השורות הבאות :

require __DIR__.'/../bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/start.php';

ונרשום את התיקיות עצמן, בצורה יחסית

שינויים שצריך לעשות בתיקית bootstrap

עכשיו, נעתיק את כל שאר התיקיות , חוץ מ-public שכבר טיפלנו בה

נעתיק את כל השאר אל מקום אחר בשרת

זה יכול להיות גם מקום שכלל לא "חשוף" ל-Apache.

שזה גם בטיחותי יותר.

ואז ניכנס אל המיקום החדש של תיקית bootstrap

ויש שם קובץ path.php

ונשנה שם את הערך של public למיקום היחסי החדש שלו.

'public' => __DIR__.'/../public',

 

ואחרי כן

המערכת כבר תעבוד חלק.

סיכום השינויים :

  1. להעתיק את תוכן public למיקום שבו אתם רוצים שהמערכת תרוץ

  2. לשנות בתוך index.php את מיקומי התיקיות

  3. להעתיק את כל שאר התיקיות (למעט public) אל מיקומן החדש, עדיף מחוץ לטווח של Apache

  4. לשנות בתוך תיקית bootstrap (במיקומה החדש) את קובץ path.php, את הערך של המפתח public

 

בהצלחה!

 

מקור :

http://stackoverflow.com/questions/19923091/avoid-public-folder-of-laravel-and-open-directly-the-root-in-web-server