زمان جاری: 2012/05/24, 04:19 PM خوش آمدید مهمان گرامی! (ورودعضویت)



قرار دادن کنترولر ها در آدرسی خاص


ارسال موضوع  ارسال پاسخ 
  • 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
قرار دادن کنترولر ها در آدرسی خاص
نویسنده پیام
horap30 آفلاین
تازه کار
*

ارسال‌ها: 35
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 18
8 بار تشکر شده در 5 پست
ارسال: #1
قرار دادن کنترولر ها در آدرسی خاص
سلام دوستان عزیز
من تازه آموزش cakephp رو شروع کردم.
یه سوال داشتم ازتون ؟
من میدونم که ساختار url ها در cakephp به این شکل هست
www.domain.com/controller/method
از طرفی میدونم که صفحات ادمین رو میشه در این آدرس قرار داد :
www.domain.com/admin/controller/method
حالا میخاستم بپرسم که ساختار دوم رو ما میتونیم چندین بار پیاده سازی کنیم ؟
یعنی مثلا من میخام که کنترولرهای کاربرانم با آدرس زیر قابل دستیابی باشن :
www.domain.com/account/controller/method

اگه میشه (که فکر میکنم حتما بشه) راهش رو برام مفصلا ( تازه کارم دیگه Big Grin )توضیح بدین.
ممنون از همگی
2010/06/01 08:08 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : saleh
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #2
RE: قرار دادن کنترولر ها در آدرسی خاص
ابتدا پیوستنون رو به جمع کیک دوستان تبریک عرض میکنم
جواب سوال شما در تنظیمات روتر هست. در واقع شما با تعریف روت ها میتوانید روال آدرس ها رو به طور کلی تغییر بدید
به طور مثال
کد PHP:
Router::connect(
                    
'/:username/:controller/*'
                    array(
'controller' => ':controller' ),
                    array(
                      
'pass' => array('username'),
                      
'username' => '[a-zA-Z0-9]+'
                    
)
                  );

or

      
Router::connect(
                    
'/account/:controller/*'
                    array(
'controller' => ':controller' ),
   
                  ); 
2010/06/01 09:00 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : horap30 payamsp
horap30 آفلاین
تازه کار
*

ارسال‌ها: 35
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 18
8 بار تشکر شده در 5 پست
ارسال: #3
RE: قرار دادن کنترولر ها در آدرسی خاص
خیلی ممنون از پاسختون
من این کد رو توی فایل routes.php وارد کردم :
کد PHP:
Router::connect('/account/notes/*', array('controller' => 'notes')); 
و کنترلر notes رو به این آدرس نسبت دادم حالا وقتی به آدرس بالا میرم تایع index از کنترلر notes اجرا میشه ولی وقتی روی edit یا view کلیک میکنم دوباره برمیگرده به آدرس سابق یعنی /account/ از اولش برداشته میشه.
فکر میکنم موقع ساخت کنترلر باید یه سری تنظیماتی روش انجام بشه
راهنمایی میفرمایید چطور این مشکل رو برطرف کنم ؟
یعنی میخام وقتی روی view کلیک کردم به جای این آدرس :
http://www.domain.com/notes/view
بره به این آدرس :
http://www.domain.com/account/notes/view
و به همین ترتیب متد های دیگه.
2010/06/02 12:43 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
parsig آفلاین
Super Moderator
******

ارسال‌ها: 323
تاریخ عضویت: Jan 2010
رتبه: 6
تشکر: 131
357 بار تشکر شده در 179 پست
ارسال: #4
RE: قرار دادن کنترولر ها در آدرسی خاص
کد PHP:
Router::connect('/account/notes/:action/*', array('controller' => 'notes')); 

[تصویر: ubuntu2_userbar.gif]
یک برنامه نویس
آنکه مست آمد و دستی به دل ما زد رفت ... در این خانه ندانم به چه سودا زد و رفت
2010/06/02 05:10 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : horap30 ghasem.fattahpour
horap30 آفلاین
تازه کار
*

ارسال‌ها: 35
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 18
8 بار تشکر شده در 5 پست
ارسال: #5
RE: قرار دادن کنترولر ها در آدرسی خاص
من تونستم با این کد به اون چیزی که میخام دست پیدا کنم :
کد PHP:
Router::connect('/account/:controller/:action/*', array('controller' => ':controller')); 

حالا یه مشکل دیگه پیش اومده Blush
کنترلرها هنوزم بدون /account/ در دسترس هستند من نمیخام که اینجوری باشه.
چه کار باید انجام بدم ؟
2010/06/03 01:25 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #6
RE: قرار دادن کنترولر ها در آدرسی خاص
2 راه دارید!
1- prefix تعریف کنید.
2- به صورت پلاگین پیاده سازی کنید کنترلرتون رو
2010/06/03 02:08 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
horap30 آفلاین
تازه کار
*

ارسال‌ها: 35
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 18
8 بار تشکر شده در 5 پست
ارسال: #7
RE: قرار دادن کنترولر ها در آدرسی خاص
در مورد این prefix یه توضیحی میدین ؟
چون plugin که هنوز یاد نگرفتم بنویسم Confused
لطفا کاملتر توضیح بدین من الان 6 روزه کیک رو شروع کردم
2010/06/03 03:12 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #8
RE: قرار دادن کنترولر ها در آدرسی خاص
پیشوند ها یا prefix ها در واقع میاد واسه پروژه سطح تعریف میکنه. مثلا شما در پروزه دو قسمت دارید. یکی قسمت کاربران و یکی هم قسمت مدیریت. پس برای مدیریت میاید prefix تعریف می کنید. از این بعد هروقت در آدرس ها
کد:
.com/admin/post/add
دیده بشه کیک میدونه که این پیشوند هست و ساختار ها رو عوض میکنه(در صورت تعریف )
مثلا در آدرس بالا دیگه نمیره
کد PHP:
function add(){} 
رو فراخوانی کنه میره

کد PHP:
function_add(){} 

رو فراخوانی میکنه. و شما میتونید اینجا تم مجزا اییجاد کنید. یا لایوت مجزا تعریف کنید.

ولی خودم اصلا سلاح نمی دونم از این روش استفاده کنید. فقط گفتم میشه Big Grin


بهترین راه همون پلاگین هست



راه دیگه هم این هست که

که شما بیاید روتر رو این گونه تعریف کنید.
کد PHP:
Router::connect(
                    
'/:myprefix/:controller/:action/*'
                    array(
'controller' => ':controller' ),
                    array(
                      
'pass' => array('myprefix'),
                      
'username' => '[a-zA-Z0-9]+'
                    
)
                  ); 

حالا شما در متغیر سراسر $this->passedArgs یک فیلد دارید که شامل [myprefix] => 'مقدار وارد شده' هستید.

حالا هرجا میخواهید لیینک کنید. این آرایه رو چک میکنید در صورتی که مقدار دهی شده باشه با آدرس جمع میزنه

کد PHP:
echo $html->link('test','/'.$this->passedArgs['myprefix'].$this->here); 

این روش پویا هست
این رو هم میتونی امتحان کنی شاید چواب بده

کد PHP:
echo $html->link('test', array('plugin'=> 'accunt') );
or
echo 
$html->link('test', array('prefix'=> 'accunt') ); 
البته قبل از راه بالا انجامش بدید
2010/06/03 03:50 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : horap30 ghasem.fattahpour
horap30 آفلاین
تازه کار
*

ارسال‌ها: 35
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 18
8 بار تشکر شده در 5 پست
ارسال: #9
RE: قرار دادن کنترولر ها در آدرسی خاص
با تشکر
خاستم عرض کنم که من مشکل ساخت لینک ندارم چون با همون کد روتر که وارد کردم لینک ها هم دارن درست ساخته میشن.
فقط مشکلی که الان وجود داره اینه که کنترلرهای من از هر 2 آدرس زیر قابل دسترسی هستند :
http://domain.com/account/controller/action
http://domain.com/controller/action
من میخام کاربر دیگه نتونه از آدرس دوم به کنترلرها و اکشن ها دسترسی داشته باشه مثلا اگر خواست تغییر پسورد بده فقط از این آدرس بتونه به فرم تغییر پسورد دسترسی داشته باشه :
http://domain.com/account/security/changepass
اما الان از این آدرس هم میتونه به فرم تغییر رمز دسترسی پیدا کنه :
http://domain.com/security/changepass

متوجه شدید منظورم چیه ؟
ضمن اینکه با تعریفی که شما از prefix ارایه کردید فکر میکنم این دقیقا همون چیزی باشه که من میخام چرا صلاح نمیدونید که از prefix استفاده کنم ؟ مشکل امنیتی داره ؟

حالا چطور میشه این prefix رو تعریف کرد ؟؟
2010/06/03 04:32 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #10
RE: قرار دادن کنترولر ها در آدرسی خاص
perfix رو بیشتر زمانی استفاده میشه که بخواهیم چند محیط داشته باشیم مثل مدیر و سوپر وایزر . که هر کودوم عملکرد و ممکن ظاهر متفاوتی داشته باشند.

برای تعریفش هم باید در core.php تنظیم و ست کرد

در مورد مشکلی که گفتید. راه زیاده. میتونید از طریق beforeFilter اگه پروفیکسی وارد نشده بود دستی ریدایرکت کنید
2010/06/04 01:58 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
parsig آفلاین
Super Moderator
******

ارسال‌ها: 323
تاریخ عضویت: Jan 2010
رتبه: 6
تشکر: 131
357 بار تشکر شده در 179 پست
ارسال: #11
RE: قرار دادن کنترولر ها در آدرسی خاص
واقعا یکی این beforeFilter یکی از خوشمزه ترین چیز هایی هست که می شه همراه با یک کیک خوشمزه خورد !
فوق العاده ست

[تصویر: ubuntu2_userbar.gif]
یک برنامه نویس
آنکه مست آمد و دستی به دل ما زد رفت ... در این خانه ندانم به چه سودا زد و رفت
2010/06/04 02:51 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : saleh
iraitc آفلاین
آریو برزن
**

ارسال‌ها: 57
تاریخ عضویت: Sep 2011
رتبه: 0
تشکر: 21
30 بار تشکر شده در 22 پست
ارسال: #12
RE: قرار دادن کنترولر ها در آدرسی خاص
نقل قول:میتونید از طریق beforeFilter اگه پروفیکسی وارد نشده بود دستی ریدایرکت کنید
صالح جان میشه توضیح بدی چطور این کار رو میکنی ؟
2011/10/07 01:16 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #13
RE: قرار دادن کنترولر ها در آدرسی خاص
چه ورژنی رو ؟؟
2011/10/08 08:00 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
iraitc آفلاین
آریو برزن
**

ارسال‌ها: 57
تاریخ عضویت: Sep 2011
رتبه: 0
تشکر: 21
30 بار تشکر شده در 22 پست
ارسال: #14
RE: قرار دادن کنترولر ها در آدرسی خاص
cake 1.3
2011/10/09 03:54 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #15
RE: قرار دادن کنترولر ها در آدرسی خاص
وقتی تاکید دارم که خوب داکیومنت رو نگاه بندازید تا چشماتون عادت کنه واسه این هست
کد PHP:
http://book.cakephp.org/view/959/Controller-Attributes 

به دنبال prefix بگردید
2011/10/09 10:06 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : ghasem.fattahpour
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: