2014-10-20 53 views
0

用戶個人資料的網址是:的Zend framework2 URL我ZF2應用程序重寫

http:/mywebsite/profile/index/index/457/ 

這裏457是用戶的ID(比如rogger_federer)。

我希望我的URL看起來像這樣(通過使用URL ID從數據庫中獲取的用戶名)

http:/mywebsite/profile/rogger_federer 

我htaccess文件是

RewriteEngine On 
# The following rule tells Apache that if the requested filename 
# exists, simply serve it. 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do 
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work 
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution. 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ 
RewriteRule ^(.*) - [E=BASE:%1] 
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] 

我需要什麼樣的變化在.htaccess做文件?

請幫助。我對zend很陌生,對htaccess和模式沒有太多的瞭解。

在此先感謝。

回答

0

這基本上不是您可以在.htaccess中執行的操作,因爲您需要查看數據庫。

當您收到請求時發生的事情是,它先通過您的htaccess,然後再通過路由器。您的路由配置位於您的模塊配置文件中。

你要做的是從profile/index/index/457 /(可能是默認路由,你可以引用你的配置文件獲取更多信息)到接受profile/rogger_federer的東西一個段路由/ profile /用戶名:([az-az _] *),並且沒有默認值。這條路由必須發送給一個控制器,你可以在db中查找並根據用戶名獲取用戶。

您還需要確保用戶名具有唯一約束,也是sluggable /猛擊(消毒的URL)。

0

您應該基於用戶鼻涕蟲的用戶名和這個保存到用戶數據庫記錄。

例如,您可以使用Alnum過濾器,然後用連字符或下劃線替換空格。

然後,您將需要在這個「塞」字段建立索引和查詢數據庫時爲用戶記錄,而不是ID使用這個索引(這將不再是可以從URL)

的蛞蝓的URL,應配置爲路由PARAM在你的路由配置,你可以很容易地使用PARAMS訪問它在你的控制器動作()插件:

$slug=$this->params('slug'); 
$userRepository->findBySlug($slug); 

編號:http://framework.zend.com/manual/2.0/en/modules/zend.mvc.plugins.html#the-params-plugin

路由示例:

'update' => 

['type' => 'Zend\Mvc\Router\Http\Segment','options' => 
    ['route' => '/profile/:slug','constraints' => 
     ['id' => '[a-zA-Z0-9_-]*'],'defaults' => 
      ['controller' => 'User','action' => 'profile', 
             ] 
            ] 
           ] 

參考:

ZF2路由:http://framework.zend.com/manual/2.3/en/modules/zend.mvc.routing.html