سلام
بعضی مواقع توی پروژه های بزرگ گاهی ممکنه حداقل 20-30 کنترللر داشته باشیم که فرضا بطور میانگین توی هر کدوم از کنترللر های ، حداقل 10تا اکشن داشته باشیم که مثلا چیزی حدود 200-300 آدرس میشه که قراره کاربر باهاش درگیر بشه و به عبارتی براشون Route تعریف بشه!
توی فریم ورک CakePHP ما موضوعی داریم به اسم Route Elements که میشه ی Route تعریف کرد که همه آدرس ها از اون پترن یا الگو پیروی کنند و آدرس دهی ها بر اساس اون انجام بشه(البته که Route با الگو های خاص هم میشه ایجاد کرد). به مثال توجه کنید :
$routes->connect(
'/:controller/:action/*'
);
من خیلی گشتم تا همچین قابلیتی رو برای لاراول پیدا کنم که تا الگو بدم و هر آدرس کاربر درخواست کرد طبق اون الگو مسیریابی بشه و مجبورم به ازای هر Action ی روتر بدم.
راه حلی ، روشی ، نظری چیزی ؟
سلام
@adeveloper
ببینید توی لاراول قابلیتی هست توی صفحه روت ها که شما میتونید resource بزنید
وقتی نوع resource رو انتخاب میکنید و کنترلر رو براش انتخاب میکنید
میاد انواع اکشن هارو خودش میسازه و قابلیت استفاده براش میزاره
در صورتی که شما یه خط نوشتی
یه مثال میزنم
شما توی web.php در لاراول :
Route::resource('category', 'CategoryController');
این رو بزنید
توی کنترلرتون
class CategoryController extends Controller
{
public function index(Request $request)
{
}
public function create()
{
}
public function store(Request $request)
{
}
$category = Category::create($cat_data);
if ($category instanceof Category) {
return redirect('modir/category/create');
}
}
public function show($id)
{
//
}
public function edit($id)
{
}
public function update(Request $request, $id)
{
}
public function destroy($id)
{
}
}
به تمامی این متد ها با url های مشخص دسترسی دارید
این هم مشخصات روت ها :
| | GET|HEAD | modir/category | category.index | App\Http\Controllers\Admin\CategoryController@index | web |
| | POST | modir/category | category.store | App\Http\Controllers\Admin\CategoryController@store | web |
| | GET|HEAD | modir/category/create | category.create | App\Http\Controllers\Admin\CategoryController@create | web |
| | POST | modir/category/delete/{id} | category.delete | App\Http\Controllers\Admin\CategoryController@delete | web |
| | PUT|PATCH | modir/category/{category} | category.update | App\Http\Controllers\Admin\CategoryController@update | web |
| | GET|HEAD | modir/category/{category}/edit | category.edit | App\Http\Controllers\Admin\CategoryController@edit | web |
البته فکر کنم درست نتونید اینجا تشخصی بدید عکسشو میزارم براتون
http://uupload.ir/files/386x_route.png
همه اینا با 1 خط کد!
و حالا آپشن های زیادی هم داره
میتونید بعضی متد هارو بگید ، همه رو بگید و.....
لاراول Route محور هست و نیاز به تعریف روت ها دارید ولی با یک سری از ترفند ها میتونید کارو ساده تر کنید مثلا استفاده از resource .
در موردش بیشتر توضیح میدید؟ براتون مقدور هست یک مثال عملی در الگوی که مطرح کردم بزنید؟ اگر لاراول چنین موضوع با اهمیتی رو دربر نمیگیره پس برای پروژه های بزرگی که گاهی ممکنه تا 700-800(برای یکی از شرکت هایی که کار میکردم واقعا پروژشون به همین بزرگی بود) اکشن داشته باشیم چطور باید عمل کرد؟
سلام
@adeveloper
ببینید توی لاراول قابلیتی هست توی صفحه روت ها که شما میتونید resource بزنید
وقتی نوع resource رو انتخاب میکنید و کنترلر رو براش انتخاب میکنید
میاد انواع اکشن هارو خودش میسازه و قابلیت استفاده براش میزاره
در صورتی که شما یه خط نوشتی
یه مثال میزنم
شما توی web.php در لاراول :
Route::resource('category', 'CategoryController');
این رو بزنید
توی کنترلرتون
class CategoryController extends Controller
{
public function index(Request $request)
{
}
public function create()
{
}
public function store(Request $request)
{
}
$category = Category::create($cat_data);
if ($category instanceof Category) {
return redirect('modir/category/create');
}
}
public function show($id)
{
//
}
public function edit($id)
{
}
public function update(Request $request, $id)
{
}
public function destroy($id)
{
}
}
به تمامی این متد ها با url های مشخص دسترسی دارید
این هم مشخصات روت ها :
| | GET|HEAD | modir/category | category.index | App\Http\Controllers\Admin\CategoryController@index | web |
| | POST | modir/category | category.store | App\Http\Controllers\Admin\CategoryController@store | web |
| | GET|HEAD | modir/category/create | category.create | App\Http\Controllers\Admin\CategoryController@create | web |
| | POST | modir/category/delete/{id} | category.delete | App\Http\Controllers\Admin\CategoryController@delete | web |
| | PUT|PATCH | modir/category/{category} | category.update | App\Http\Controllers\Admin\CategoryController@update | web |
| | GET|HEAD | modir/category/{category}/edit | category.edit | App\Http\Controllers\Admin\CategoryController@edit | web |
البته فکر کنم درست نتونید اینجا تشخصی بدید عکسشو میزارم براتون
http://uupload.ir/files/386x_route.png
همه اینا با 1 خط کد!
و حالا آپشن های زیادی هم داره
میتونید بعضی متد هارو بگید ، همه رو بگید و.....
@Alimotreb
ممنون بابت وقتی که گذاشتید و پاسخی که دادید.
با توجه به قابلیتی که فرمودید اگه نام تابع نام هایی غیر از نام های عمومی باشه (مثلا serachArea یا مثلا acceptOne) هم این قابلیت Resource براش جواب میده ؟
اگر جوابتون بله هستش ، چجوری باید مشخص کنید این تابع برای Read هست یا Write هست یا هر دو ؟
سلام مجدد
@adeveloper
با resource در تعریف روت ها شما میایید و اصول پیاده سازی روت ها برای انجام عملیات CRUD رو پیاده سازی میکنید و کوتاه ترش میکنید
4 عملیات رو شما میایید و با resource پیاده میکنید
کنترلرشو بهش پاس میدید و ....
با این کار به جای اینکه شما برای کنترلر و متد ها بیایید برای هر کدوم یه روت بنویسید که عملیات crud رو انجام بدید
با resource میایید و اینا رو در یک مجموعه طبق مثالی که زدم براتون مینویسید
برای هر متدی قابلیت resource جواب میده
قابلیت کاستوم کردن داره
وارد صفحه لاراول بشید
ریز ریزشو که چه قابلیت هایی داره اونجا نوشته میتونید استفاده کنید
بررسی کردم و احساس میکنم کار رو پیچیده کرده و اجازه نمیده به راحتی پترن هایی که مدنظرمون هستش رو برای Route پیاده سازی کنیم. ممنون بابت پیگیری
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟