Zend Framework Kontrolör Dönüşümler

4 Cevap php

Aşağıdaki gibi benim dizin yapısı kurdunuz:

Application Root
|-application
|  |--configs
|  |--controllers
|  |  |--helpers
|  |
|  |--layouts
|  |  |--scripts
|  |
|  |--models
|  |--views
|     |--scripts
|        |--index
|        |--test
|
|--data
|  |--session
|
|--public
|--index.php
|--.htaccess

Benim kontrolörleri dizinde, ben 2 denetleyicileri var: IndexController ve TestController özdeş iç tanımları var 2 yöntemleri ile, indexAction ve testingAction . Ben benim tarayıcı işaret ederken localhost/test veya localhost/testing veya {[gittiğinizde localhost/application (benim IndexController.indexAction() sonucunu olsun ama 6)]} ya da gerçekten başka bir varyasyon, ben bir 404 Not Found hatası alıyorum.

Ben Zend Framework (1.9.6 sanırım) kullanıyorum ve hiçbir sorun sözdizimi hataları açısından çeşitli kaynak PHP dosyaları ile olduğunu teyit ettik.

Neden bu davranışı görme olabilir ve ben bunu düzeltmek için ne yapabilirim?

EDIT:

Ben başka bir geliştirici bana benim kurulum karşılaştırmak için tam Zend-tabanlı bir uygulama göndermek vardı. Dosyalarının konumu, ya da çeşitli konfigürasyon dosyalarının içeriği bakımından hiçbir belirgin fark yoktu. Ancak, çok kendi sitesinde, ben sadece sitenin dizin sayfasına erişebilirsiniz, ancak iç kontrol hiçbiri. O sorunu yok. Bu benim Apache kurulum ile muhtemelen bir sorun var mı?

4 Cevap

Eğer Apache yapılandırmaları kontrol edin. .htaccess mod_rewrite düzgün çalışmıyor değil gibi görünüyor

GÜNCELLEME 1:

Ayrıca kontrol:

	<Directory "/Applications/MAMP/htdocs"> # OR WHAT IS IN YOU CONF FILE

   ... SKIP ...
    #
	# AllowOverride controls what directives may be placed in .htaccess files.
	# It can be "All", "None", or any combination of the keywords:
	#   Options FileInfo AuthConfig Limit
	#
		AllowOverride All

   ... SKIP ...
	</Directory>

AllowOverride All seçeneği için. Onsuz .htaccess dosya çalışmıyor

  1. Sen / kamu, localhost değil / uygulamayı localhost işaret etmelidir.
  2. ZF varsayılan denetleyici ve eylem adı olarak "index" kullanılmıştır. Localhost / halka çalıştığınızda Yani, localhost/public/index/index, indexController.indexAction sonuçlanacaktır bulacaksınız. Eğer localhost/test o localhost/test/index bulacaksınız ve localhost/testing localhost/testing/index neden olacaktır işaret etti.

Yani, localhost/test/testing denemelisiniz.

Bir .htacess dosya ve index.php içermelidir ki, localhost/public tarayıcınızı işaret edilmelidir. Eğer temel olarak başlayan uygulamanın kullanıyorsanız 404 sonuçlandı olurdu tüm istekler index.php hangi geçirilen sonuna kadar böylece, .htaccess yapılandırma ayarları olmalıdır sonra sırayla Uygun kontrolörleri yükleme, uygulamayı başlatır.

EDIT
You also have the functions slightly wrong (I think). If you go to localhost/test it should call the index action in the test controller (unless you have defined another default action in the configuration).

Eğer test denetleyicisi test adında bir eylem var ise, erişmek istediğiniz:

localhost / public / test / test /

Eğer bir hata denetleyicisi kurmak eğer debug her şeyi çok daha kolay yapar gibi, yardımcı olur. Ben denemek ve var olmayan bir eylemi erişmek Örneğin, ben (zaman geliştirme modunda) bu olsun:

Mesaj: Eylem "index" (yok ve __ çağrı sıkışıp değildi)

Stack trace:
...

İstek Parametreleri:

array 'controller' => string 'mod' (length=3)
'action' => string 'index' (length=5)
'module' => string 'default' (length=7)

u indexAction TestController gibi url ile çalışmak için olmalıdır localhost/test