Hafsa Aly نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 السلام عليكم عند بدء عمل admin panel للمشروع اين انشئ الcontrollers الخاصه بال routes مع العلم انني اعمل على اصدار laravel7 هل انشئ لها controller جديده غير الcontroller الخاصه بجزء الfront في مجلد controller 2 اقتباس
0 Sam Ahw نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 نعم من الأفضل فصل المتحكمات controllers تبعاً للوظائف التي تقوم بها، لأن جمع عدّة وظائف أو وجود توابع كثيرة ضمن متحكم controller واحد سيجعل من الصعب على المبرمج العودة إلى الكود وصيانته أو تحسينه أو ملاحقة الأخطاء فيما بعد. لذلك يفضّل دوماً فصل المتحكمات عن بعضها. بحيث يتم تجميع الخصائص التي ترتبط بكيان واحد في المتحكّم المستقل لها. وذلك يتيح لك أيضاً أريحية في إضافة الوسائط middlewares بشكل منفصل بدلاً من دمجها في متحكّم واحد. أيضاً، وكلما زادت عملية التفصيل هذه زادت سرعة تحديد الخطأ وصيانة الكود مما يتيح لك في حال حدوث خطأ معيّن يمكنك بسهولة التوجه إلى المتحكّم المسؤول عن هذه الوظيفة ومعالجتها ، لذلك ينصح أيضاً بفصل حتى (العمليات) على عدة متحكمات، على سبيل المثال (متحكم خاص بعملية تسجيل الدخول والتحقق ونسميه: AuthenticationController،... وهكذا). حيث أن النمط المتّبع لفصل المتحكّمات الخاصة بالمدراء admins عن مستخدمي الموقع يمكن أن يكون على الشكل التالي: app http controllers Admin //نضع ضمن هذا المجلد جميع المتحكمات الخاصة بلوحة التحكم AuthenticationController AnotherController ..... MainController // باقي المتحكمات التابعة للموقع ... ولكن في النهاية، أي نمط متّبع سيعمل بالتأكيد ولن يسبب أخطاء، ولكن هذه النصائح فقط لجعل الكود مرن وقابل للقراءة أكثر. 2 اقتباس
0 بلال زيادة نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 يمكنك صنع مجلد جديد داخل المسار التالي app\Http\Controllers وليكن Admin و من ثم في هذا المجلد نخزن أي controller خاص بالادمن أو عن طريق الأمر التالي نستطيع تخزين الcontroller في أي مجلد نريده php artisan make:controller Admin\PostsController --resource لو لاحظتي جيدا أننا قمنا بتوجيه تخزين الcontroller إلى المجلد Admin كما في الأمر إعلاه. طبعا لوحة التحكم ستكون مختلفة التصميم و الأوامر عن تصميم الموقع فينصح بفصل controllers الخاصة بالموقع عن لوحة التحكم , أيضا نادراُ ما يتم استخدام نفس الcontroller لكل من اللوحة أو الموقع. و أيضا يمكن في ملف web.php الخاص ب routes تمييز لكل من اللوحة و الموقع عن طريق Route::group ففي المثال التي حددنا مسارات لوحة التحكم داخل Route::group Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () { Route::get('/login', 'Admin\Auth\LoginController@showLoginForm')->name('adminlogin'); Route::post('/login', 'Admin\Auth\LoginController@login')->name('adminloginsubmit'); Route::get('/logout', 'Admin\Auth\LoginController@logout')->name('adminlogout'); Route::post('/logout', 'Admin\Auth\LoginController@logout')->name('adminlogout'); }); كلما كانت طريقة تنظيم المشروع ممتازة وجيدة فيسهل مستقبلا التطوير على المشروع و أيضا هذا قد يساعدكي في مشروعات أخرى من الأستفادة من العناصر المشتركة في مشاريع مستقبلية. 1 اقتباس
0 Wael Aljamal نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 يتم فصل المتحكمات حسب عملها بوضعها في مجلدات فرعية ضمن المجلد controller. المتحكمات الخاصة بالعرض تكون ضمن مجلد مثلا view، المتحكمات الخاصة بلوحة التحكم تكون ضمن مجلد وليكن admin. وطبعا كل متحكم يكون مسؤول عن أمر محدد ووظائف ترتبط بنفس الغرض الوظيفي/العرض/النموذج. اقتباس
0 Hafsa Aly نشر 15 فبراير 2021 الكاتب أرسل تقرير نشر 15 فبراير 2021 بتاريخ منذ ساعة مضت قال بلال زيادة: يمكنك صنع مجلد جديد داخل المسار التالي app\Http\Controllers وليكن Admin و من ثم في هذا المجلد نخزن أي controller خاص بالادمن أو عن طريق الأمر التالي نستطيع تخزين الcontroller في أي مجلد نريده php artisan make:controller Admin\PostsController --resource لو لاحظتي جيدا أننا قمنا بتوجيه تخزين الcontroller إلى المجلد Admin كما في الأمر إعلاه. طبعا لوحة التحكم ستكون مختلفة التصميم و الأوامر عن تصميم الموقع فينصح بفصل controllers الخاصة بالموقع عن لوحة التحكم , أيضا نادراُ ما يتم استخدام نفس الcontroller لكل من اللوحة أو الموقع. و أيضا يمكن في ملف web.php الخاص ب routes تمييز لكل من اللوحة و الموقع عن طريق Route::group ففي المثال التي حددنا مسارات لوحة التحكم داخل Route::group Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () { Route::get('/login', 'Admin\Auth\LoginController@showLoginForm')->name('adminlogin'); Route::post('/login', 'Admin\Auth\LoginController@login')->name('adminloginsubmit'); Route::get('/logout', 'Admin\Auth\LoginController@logout')->name('adminlogout'); Route::post('/logout', 'Admin\Auth\LoginController@logout')->name('adminlogout'); }); كلما كانت طريقة تنظيم المشروع ممتازة وجيدة فيسهل مستقبلا التطوير على المشروع و أيضا هذا قد يساعدكي في مشروعات أخرى من الأستفادة من العناصر المشتركة في مشاريع مستقبلية. public function show($id){ $blog_item = Blog::find($id); return view('front.blog-post','back.blog.edit',compact('blog_item')); } في حال اذا اردت عرض هذه البانات على اولا view خاصه بال backend وثانيا ايضا نفس البيانات اود عرضها على front view فكيف اكتبها public function show($id){ $blog_item = Blog::find($id); return view('front.blog-post','back.blog.edit',compact('blog_item')); } في حال اذا اردت عرض هذه البانات على اولا view خاصه بال backend وثانيا ايضا نفس البيانات اود عرضها على front view فكيف اكتبها اقتباس
0 Wael Aljamal نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 بتاريخ 23 دقائق مضت قال Hafsa Aly: public function show($id){ $blog_item = Blog::find($id); return view('front.blog-post','back.blog.edit',compact('blog_item')); } في حال اذا اردت عرض هذه البانات على اولا view خاصه بال backend وثانيا ايضا نفس البيانات اود عرضها على front view فكيف اكتبها أرجو كتابة السؤال خارج محرر الأكواد لأنه غير مفهوم، مع التوضيح من فضلك اقتباس
0 Hafsa Aly نشر 15 فبراير 2021 الكاتب أرسل تقرير نشر 15 فبراير 2021 بتاريخ 42 دقائق مضت قال Wael Aljamal: أرجو كتابة السؤال خارج محرر الأكواد لأنه غير مفهوم، مع التوضيح من فضلك انا لدي تابع داخل داخل controller سيقوم بارجاع نفس البيانات وهذه البيانات اود عرضها مرة البيانات داخل view خاصه بالموقع مرة ومرة اخرى اود عرضها في view خاصه بجزء الadmin panel اقتباس
0 بلال زيادة نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 بتاريخ 20 دقائق مضت قال Hafsa Aly: انا لدي تابع داخل داخل controller سيقوم بارجاع نفس البيانات وهذه البيانات اود عرضها مرة البيانات داخل view خاصه بالموقع مرة ومرة اخرى اود عرضها في view خاصه بجزء الadmin panel يمكن تكرار الاستعلام مرة داخل controller الخاص ب admin panel و مرة في الcontroller الخاص بالموقع. يجوز تكرار نفس الاستعلام داخل أي controller تريدين. 1 اقتباس
0 Hafsa Aly نشر 15 فبراير 2021 الكاتب أرسل تقرير نشر 15 فبراير 2021 بتاريخ الآن قال بلال زيادة: يمكن تكرار الاستعلام مرة داخل controller الخاص ب admin panel و مرة في الcontroller الخاص بالموقع. يجوز تكرار نفس الاستعلام داخل أي controller تريدين. انا اود تكرار نفس الاستعلام في نفس ال controller بهذا الشكل فهل هو صحيح public function index(){ $blog_list = Blog::all(); return view('front.blog', compact('blog_list')); return view('back.blog.index', compact('blog_list')); } بتاريخ 18 دقائق مضت قال Hafsa Aly: انا اود تكرار نفس الاستعلام في نفس ال controller بهذا الشكل فهل هو صحيح public function index(){ $blog_list = Blog::all(); return view('front.blog', compact('blog_list')); return view('back.blog.index', compact('blog_list')); } هل الكود صحيح 1 اقتباس
0 سمير عبود نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 يبدو أن الأمور مُختلطة عليك قليلاً، في المُتحكم كل تابع يُؤدي مهمة مُعينة مثلاً إن قمنا بإنشاء مُتحكم PostController فالتابع index مسؤول عن إرجاع صفحة عرض واحدة و تمرير المقالات لها مثلا بهذا الشكل: <?php public function index() { $posts = Post::latest()->get(); return view("posts.index", compact('posts')); } إذا أضفنا أي كود بعد التعليمة return هذا الكود يُسمى dead code و لن يتم تنفيذه، أي ما تُحاولين القيام به غير مُمكن. بما أنك تريدين القيام بجزء لوحة التحكم و جزء الواجهة فيُنصح بفصل الجزئين عن بعضهما و هذا ما أفعله: إنشاء مُجلد خاص لمُتحكمات لوحة التحكم و ليكن Dashboard داخل مُجلد Controllers و أي مُتحكم أحتاجه في لوحة التحكم أضعه فيه. أحيانا قد يكون المشروع كبير فالأحسن إنشاء ملف مسارات خاص بلوحة التحكم أيضاً مثلاً admin.php و نضع فيه كافة مسارات لوحة التحكم سيكون بهذا الشكل مثلاً: <?php use Illuminate\Support\Facades\Route; Route::prefix('dashboard') ->name('dashboard.') ->group(function () { // هنا نضع أي مسار خاص بلوحة التحكم و أي مسار يكون مسبوق تلقائياً ب dashboard في الرابط }); الآن يجب أن نُخبر laravel أن هناك ملف مسارات جديد يجب أن تأخذه بعين الإعتبار و يتم ذلك على مُستوى مزود الخدمة RouteServiceProvider: اولاً نُضيف مجال الأسماء لمُتحكمات لوحة التحكم في مُتغير: <?php protected $dashboard_namespace = 'App\Http\Controllers\Dashboard'; حيث كافة المتحكمات الموجودة في المُجلد Dashboard الذي أنشأناه سابقاً يجب أن تكون تابعة لهذا المجال. ثانياً في التابع map نضيف سطر جديد لعمل map لمسارات ملف admin.php بهذا الشكل: <?php public function map() { $this->mapApiRoutes(); // هذا السطر يكون موجود $this->mapWebRoutes(); // هذا السطر يكون موجود ايضاً $this->mapDashboardRoutes(); // هذا ما نضيفه // } ثالثاً بعدما استدعينا التابع mapDashboardRoutes نقوم بإنشائه لأنه لن يكون موجوداً ضمن نفس مزود الخدمة: <?php protected function mapDashboardRoutes() { Route::middleware('web') ->namespace($this->dashboard_namespace) // هذا السطر لتحديد مجال الأسماء ->group(base_path('routes/admin.php')); // و هنا حددنا ملف المسارات } الآن بعدما أعددنا كل شيء نحتاج فقط لإضافة المسار الذي نُريده و المتحكم الذي نريده مثلاً نريد عرض المقالات في لوحة التحكم فنُنشئ المسار على شكل resource لأنه سيضم مُختلف العمليات في ملف مسارات لوحة التحكم admin.php: <?php use Illuminate\Support\Facades\Route; Route::prefix('dashboard') ->name('dashboard.') ->group(function () { // admins routes Route::resource('posts', 'PostController'); }); بعدما أعددنا المسار نحتاج إنشاء مُتحكم للمقالات PostController في المُجلد Dashboard الذي أنشأناه سابقاً: <?php namespace App\Http\Controllers\Dashboard; use App\Http\Controllers\Controller; use App\Post; class PostController extends Controller { public function index() { $posts = Post::latest()->get(); return view('dashboard.posts.index', compact('posts')); } } هذا يعني أننا سنُضيف مُجلد dashboard داخل مُجلد views و فيه نضع كافة صفحات العرض الخاصة بلوحة التحكم، و بما أننا نعمل على المقالات فسنضع مُجلد إسمه posts و فيه نضع كافة صفحات العرض الخاصة بالمقالات: views |_ dashboard |__|___ posts |__|____|__ index.blade.php |__|____|__ create.blade.php |__|____|__ edit.blade.php |__|____|__ show.blade.php |__|___ categories |__|____|__ index.blade.php |__|____|__ create.blade.php |__|____|__ edit.blade.php |__|____|__ show.blade.php |... هذا فيما يخص جزء لوحة التحكم، فيما يخص جزء الواجهة فسيبقى كما كان، المسارات الخاصة به سيتم وضعها في ملف web.php و المُتحكمات الخاصة به ستكون في مُجلد Controllers مُباشرة، يُمكنك التنظيم أيضاً فبما أننا وضعنا مُجلد يضم كافة صفحات العرض الخاصة بلوحة التحكم يُمكنك وضع مُجلد يضم كافة صفحات العرض الخاصة بالواجهة، الأمر يعود لك بهذا الخصوص. الآن إذا اردنا الذهاب إلى صفحة المقالات الموجودة في لوحة التحكم سنستعرض الرابط التالي: /dashboard/posts أما صفحة المقالات الخاصة بالواجهة: /posts بالتوفيق. 2 اقتباس
0 Wael Aljamal نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 بتاريخ 2 ساعات قال Hafsa Aly: انا اود تكرار نفس الاستعلام المتحكمات التي تريدين تطبيقها نفسها في أكثر من جزء من المشروع، يمكنك وضعها في مجلد منفصل مثلا sharedControllers ضمن مجلد controllers اقتباس
السؤال
Hafsa Aly
السلام عليكم
عند بدء عمل admin panel للمشروع اين انشئ الcontrollers الخاصه بال routes مع العلم انني اعمل على اصدار laravel7
هل انشئ لها controller جديده غير الcontroller الخاصه بجزء الfront في مجلد controller
10 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.