#48055663 · 10 Jun 2016, 19:51 · · პროფილი · პირადი მიმოწერა · ჩატი
QUOTE (ShalvaSoft @ 10 Jun 2016, 18:46 ) | Ruritania
QUOTE | HMVC-ს პადერჟკას ვერ ვხვდები.. რა პადერჟკა გჭირდება? როგორც გინდა ისე გამართავ აპლიკაციას. არანაირი შეზღუდვა არ გაქვს. თუ modular-ობაზე გაქვს ლაპარაკი, symfony და laravel ძალიან modular ფრეიმვორქებია. განსაკუთრებით symfony. იქ ყველაფერი module-დან იწყება.
თუ რამე package გინდა ამისთვის, უეჭველი იპოვი packagist-ზე. symfony-ს რამდენი package-იც აქვს ზოგადად, მაგდენი მემგონი არცერთ ფრეიმვორქს არ აქვს. Laravel კიდევ symfony-ზეა აწყობილი და ბევრად გამარტივებული და გამართული ვერსიაა რა. laravel 3 ვერსიიდან მოყოლებული ვმუშაობ ამ ფრეიმვორქზე. უფრო და უფრო იხვეწება.
Taylor Otwell (ლარაველის დამწერი) გენიოსია უფრო სწორად ნამდვილი შემოქმედი და მაგარი სისტემ არქიტექტორი.
Symfony სადღაც 6 პროექტზე გამოვიყენე, დაახლოებით იმ პერიოდში როცა ლარაველის 4.2 ვერსია იყო გამოსული.
ეხლა არამგონია როდესმე გადავიდე symfony-ზე. თუმცა ცალკეულად მის კომპონენტებს ყველგან ვიყენებ.
მაგალითად Symfony Console კომპონენტს ძალიან ხშირად ვიყენებ სამსახურშიც კი, როდესაც command line აპლიკაციას ვაწყობ. |
კი მოდულარობაზე მქონდა საუბარი... გასაგებია ეგ ყველაფერი
და ბარემ 10იც მაინტერესებს YII-ზე რა აზრის ხართ??? ძალიან საინტერესო ფუნქციონალი აქვს ჩემი აზრით მაგრამ simfony-ის რომ შევადაროთ რომელი უფრო ძლიაერი და ვაფშე
პატარა VS რომ გამიკეთოთ არ იქნებოდა ურიგო...
|
yii პირველი ვერსია არ ვიცი, არ მიმუშავია მაგრამ yii2 არ მომეწონა. საინტერესო ფუნქციონალში რას გულისხმობ მაგალითად?
მითხარი რა მოგეწონა და მის შესაბამის ფუნქციონალს გეტყვი მაგალითად ლარაველში.
ზოგადად მემგონი ლარაველს და yii-ს ვერ შეადარებ, იმიტომ რომ laravel-ს გაცილებით მეტი ფუნქციონალი აქვს და ბევრად უფრო სრულყოფილია.
ლარაველის რამდენიმე ძალიან მაგარ შესაძლებლობებს გეტყვი.
1. იყენებს ეგრეთწოდებულ IoC container-ს, რაც საშუალებას იძლევა გააკეთო ავტომატური dependency injection. მაგალითად გაქვს ეს interface:
CODE | interface Logger { public function log(); }
|
და გვაქვს ეს კლასი, რომელსაც ესაჭიროება რაიმე სახის Logger:
CODE | class Application { protected $logger; public function __construct(Logger $logger) { $this->logger = $logger; } }
|
და წარმოიდგინე რომ გვაქვს მაგალითად ასეთი Logger-ი:
CODE | class FileLogger implements Logger { public function log() { // TODO: Implement log() method. } }
|
ანუ კონკრეტული იმპლემენტაცია არის FileLogger.
ეხლა Application ობჯექტის შექმნა რომ მომინდეს, უნდა გავაკეთო ეს ხომ?
CODE | $application = new Application( new FileLogger );
|
და შესაბამისად, თუკი სხვაგან ვიყენებ ამ Logger-ს, ყველგან უნდა შევქმნა ეს new FileLogger() და გადავცე იმ მეთოდს ან კლასს, რასაც ესაჭიროება.
მაგრამ IoC Container გთავაზობს ასეთ რამეს:
CODE | app()->bind(Logger::class, FileLogger::class);
|
და ამის მერე, თუ მოგინდება რომ შექმნა ახალი Application ობჯექტი, გააკეთებ ამას:
CODE | $application = app()->make(Application::class);
|
და ავტომატურად გააკეთებს დანარჩენს. კადრს მიღმა PHP-ს Reflection კლასს იყენებს ამის გასაკეთებლად და რაც მთავარია ასე ვთქვათ 'ზედაპირზე' არ ჩერდება. ჩაუყვება ყველა კლასს ბოლომდე. ამ კონკრეტულ მაგალითში, FileLogger-ს რომ ჰქონდეს რაიმე Dependency, იმასაც ავტომატურად შექმნიდა.
და რაც მთავარია, მომავალში თუ გადაწყვეტ რომ FileLogger-ის მაგივრად უნდა გამოიყენო მაგალითად DatabaseLogger, მარტო ამის შეცვლა მოგიწევს მთელს აპლიკაციაში:
CODE | app()->bind(Logger::class, DatabaseLogger::class);
|
2. მოყვება Eloquent მოდელი. მაგალითად თუ გაქვს მონაცემთა ბაზაში users ცხრილი, შექმნი უბრალო PHP კლასს:
CODE | class User extends Model {
}
|
სადაც Model არის Eloquent მოდელი.
Eloquent ძალიან დიდი თემაა და დოკუმენტაციას გადახედე თუ გაინტერესებს, მაგრამ ზოგადი წარმოდგენა რომ გქონდეს, ასეთი რაღაცაა:
CODE | User::all() - // მოგცემს ყველა ჩანაწერს მონაცემთა ბაზიდან User::first() // პირველს User::where('firstName', 'komble')->first(); User::where('age', '>', 10)->orderBy('created_at', 'desc')->take(6)->get();
|
3. მოყვება console აპლიკაცია, რომელიც Symfony Console -ზეა აწყობილი. ბლომად command-ები მოყვება და ახლის დამატება უმარტივესია.
4. Phinx-ისნაირ (https://phinx.org/) api-ს იყენებს მონაცემთა ბაზის შესაქმნელად / შესაცვლელად:
CODE | $table->increments('id'); $table->string('firstName'); $table->string('email')->unique(); $table->boolean('approved')->default(false); $table->timestamps();
// შეცვლა: $table->string('firstName')->nullable()->change(); $table->boolean('approved')->default(true)->change();
|
5. cron job-ების შექმნა ასე ხდება:
CODE | $schedule->command('archevnebi:start')->yearly();
$schedule->call(function(){})->dailyAt('10:23');
$schedule->call(function(){ // თუდუ })->mondays()->at('09:00')->when(function() { return true; });
|
Queue სისტემა აქვს და linux-ის supervisor-ზე შეგიძლია მიაბა და ავტომატურად შეამოწმებს რამე საქმე ხომ არ არის გასაკეთებელი queue-ში. მაგალითად mass ემაილების გაგზავნა. ყველა ერთად რომ არ გაუშვას და შეისვენოს შიგა და შიგ.. ან რავიცი.
მოკლედ ათასნაირად შეგიძლია მოარგო შენს სისტემას ლარაველის კომპონენტები. ძალიან ბევრ საინტერესო ინტერფეისს გთავაზობს და რაც მთავარია გამარტივებულს. საკმაოდ ბევრი აბსტრაქციის ფენა აქვს ასე ვთქვათ. ანუ მაგალითად controller არ უნდა ამოწმებდეს იუზერი ლოგგედ ინ არის თუ არა, ამისათვის გაქვს middleware ფენა. ასევე კონტროლერი არ უნდა ამოწმებდეს request-ში გაგზავნილი ინფორმაცია სწორია თუ არა. აი მაგალითად რეგისტრაციას რომ აკეთებ და რომ წერ
CODE | if (!$request->firstName) { $messages[] = 'You must provide the first name'; }
|
ან რაღაც ამდაგვარი.
ამას კიდევ ცალკე ფენა აქვს.
და რაც მთავარია ამ ფენების დამატება და ზოგადად ახალი core ფუნქციონალურობის შექმნა ადვილად შეგიძლია. იმიტომ რომ სულ module-ებზეა აწყობილი ლარაველი.
|