• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
دریافت مقادیر پارامترهای ورودی
#1
چگونه مقادیر پارامترهایی چون کنترولر و اکشن و ماژول و ... را از uri برداریم؟
مثلا در داخل کنترلرها با فراخوانی زیر می شه این کار رو کرد:
کد پی‌اچ‌پی:
$this->_getParam('id'

ولی مثلا در داخل bootstrap برای ساختن یک متغیر سراسری از پارامترها چنین دسترسی وجود ندارد.
خواهشا کمک کنید!
یا مثلا تمامی پارامترها را در یک متغیر بصورت آرایه رجیستر کنیم و در تمام اجزای برنامه بتوانیم از آن استفاده کنیم!!!
  پاسخ
تشکر شده توسط :
#2
کد پی‌اچ‌پی:
Zend_Controller_Front::getInstance()->getRequest()->getParam('paramName'
  پاسخ
تشکر شده توسط : nasserghiasi
#3
فکر کنم اشکالی در کد بالا هست!
کد پی‌اچ‌پی:
Fatal errorCall to a member function getParam() on a non-object in E:\wamp\www\farabit.ir\core\library\NAG\topNavigator.php  on line 16 

ضمنا آیا نمیشه تمامی پارامترها را در داخل یک آرایه ذخیره کرد.
این تابعی که شما دادید فقط درون کنترلرها کار می کنه!
مثلا در فایل bootstrap.php قابل فراخوانی نیست
و ضمنا برای گرفتن مقادیر پارامتر ها داخل کنترلر نیازی به این کد طویل نیست. با کد زیر هم می شه نتیجه گرفت:
کد پی‌اچ‌پی:
$this->_getParam('parameterName'); 
  پاسخ
تشکر شده توسط :
#4
این‌ کد ‌فقط‌ بعد از dispach‌ شدن fronController در‌ دسترس هست
کد اخری هم که دادین که میانبر هست به چیزی که گفتم.
می تونید این کار رو هم کنید
کد پی‌اچ‌پی:
Zend_Loader::loadClass('Zend_Controller_Request_Http');

$request = new Zend_Controller_Request_Http();
$request->getParam("paramName"

اگر‌ از autoloader استفاده می‌ کنید خط اول رو نمی خواد بزارید
  پاسخ
تشکر شده توسط : nasserghiasi
#5
متاسفانه این کد جواب نمی ده.
حتی داخل کنترلر
  پاسخ
تشکر شده توسط :
#6
من هیچ راهی واسش پیدا نکردم. همه راهها این هست که حتما dispach‌ اجرا بشه.
حالا شما چرا ابن نیاز دارید شاید در جای دیگه بشه این رو حل کرد.
البته با توجه که با یکی دیگه صحبت داشتم گفته بود که اصلا استفاده از این مقادیر در داخل جایی به غیر از اکشن ها مجاز نیست. که البته حرفهای منطقی هم در این مورد می زد
  پاسخ
تشکر شده توسط :
#7
من مثلا یک شی از یک class که کارش ساختن منوی tabber بالایی هست در فایل bootstrap.php برای کل پروژه ایجاد کردم که متغیرهای ورودی آن دریافت مقادیر پارامترهای ماژول و کنترلر هست. البته استفاده از اجرای خودکار چنین توابعی که HTML به صفحه ملحق می کنند کار اصولی ای نیست چون ممکنه در برخی جاها از آجاکس استفاده کنم و بخوام فقط خروجی json داشته باشم، کلا فکر می کنم مدل mvc من چندان استاندارد نیست یه راهنمایی می کنید؟

مدل:
- برخی توابع در فایل Bootstrap.php بصورت خودکار در هر درخواستی اجرا می شوند مثلا پرکردن توابعی چون headTitle() و headLink و headMeta و تنظیمات هدر و فوتر سایت و خیلی از مواردی که در هر درخواست خروجی HTML نیاز است، با این منوال در هر درخواست خروجی HTML خواهیم داشت، ولی در کاربرد اجاکس فقط خروجی json مثلا نیاز است.
حال من ماژولی به نام news و در داخل آن کنترلری به نام IndexController و اکشنی به نام listAction ایجاد کردم. ر درخواست زیر صفحه خروجی HTML است و لیستی از اخبار جدید را نمایش می دهد:
کد:
http://localhost/news/index/list
ممکن است در بخشی از برنامه یک امکان در سایت قرار داده شود که pagination لیست اخبار بصورت آجاکسی مانند سایت کلوب باشد و هنگام کلیک بر روی شماره صفحه انتخابی یک درخواست POST بصورت آجاکس به آدرس زیر ارسال می شود و باید پاسخ و خروجی فقط بصورت json بوده و هیچ کد html نباشد:
کد:
http://localhost/news/index/list/ajax/true
آیا در اکشن ها راه حلی برای غیرفعال کردن خروجی HTML وجود دارد؟
این پروژه اولین پروژه ای هست که با زند می سازمش و می خوام تا جایی که می تونم بی نقص و توسعه پذیر بسازمش! لطفا راهنماییم کنید
(۱۳۸۸ بهمن ۱۵, ۰۱:۲۳ ق.ظ)admin نوشته: من هیچ راهی واسش پیدا نکردم. همه راهها این هست که حتما dispach‌ اجرا بشه.
حالا شما چرا ابن نیاز دارید شاید در جای دیگه بشه این رو حل کرد.
البته با توجه که با یکی دیگه صحبت داشتم گفته بود که اصلا استفاده از این مقادیر در داخل جایی به غیر از اکشن ها مجاز نیست. که البته حرفهای منطقی هم در این مورد می زد

در برخی از کلاس هایی که خودم نوشتم میخواهم از امکانات زند استفاده کنم و در پروژه بکار ببرم. مثلا کلاس ساخت منوی ناوبری بصورت تب که نیازمند مقادیر پارامترهای کنترلر و ماژول هست. در این جا چه باید کرد؟
  پاسخ
تشکر شده توسط :
#8
شما در استفاده از زند به صورت کاربردی ازش استفاده نکردین. ببینین زند یه سری امکانات داده تا شما بتونید ایده هاتون رو پیاده سازی کنین.
واسه‌ اولی می تونید از پلاگین استفاده کنید. البته همونطور که توی بحث های قبلی هم گفتم می تونید کلاس های خودتون رو بسازید . مثلا همین کلاس action رو بسازید. و توی‌متد‌ init اون‌ کاری که می خوایید انجام بدید.
من این ایده خودم رو پیاده سازی می کنم
کد پی‌اچ‌پی:
class Vahid_Controller_Action extends Zend_Controller_Action
{
    
    public function 
init(){
        
parent::init();
        
$request$this->getRequest();
        
$contextSwitch->addActionContext($request->getActionName(), array('html','json'))
                      ->
initContext();
    }


خب‌ حالا کار ما با این helper که یه مقدار توی صدا زندش کاستومایزش کردیم راحت میشه
فرض کنید درخواست ‌یه‌ اکشن به اسم list توی کنترلر index داریم. ‌حالا لینکهای زیر رو برای این کنترلر می تونیم استفاده کنیم
کد:
/index/list
// run indexController::list and render into index.phtml
/index/list/format/html
// run indexController::list and disable layout render into index.ajax.phtml
/index/list/format/json
// run indexController::list and disable layout render into index.json.phtml

امیدوارم‌ بهتون‌ کمک کرده باشه
  پاسخ
تشکر شده توسط : nasserghiasi
#9
واسه دومی هم از پلاگین ها استفاده کنید
  پاسخ
تشکر شده توسط :
#10
منظورتون استفاده از پلاگین ، رجیستر کردن یک namespace هست؟
من با استفاده از کد زیر یک پوشه رو رجیستر کردم و کلاس های من که بصورت پلاگین هستند از این پوشه در library لود می شوند:
کد پی‌اچ‌پی:
$autoloader->registerNamespace('Plugins'); 

منظورتونو متوجه شدم!
من وقتی شی view را در داخل bootstrap.php برای تعیین مسیر تم و تمپلیت ها فراخوانی می کنم اگر پارامتر ajax برابر true باشد لایه را ajax.phtml قرار میدهم و لاغیر HTML.phtml ولی مشکل من گرفتن مقادیر پارامترهای برنامه در فایل bootstrap.php هست!
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان