CakePHP 路由

cakephp 路由

 

在本章中,我們將學(xué)習(xí)以下與路由相關(guān)的主題:

  • 路由簡(jiǎn)介
  • 連接路線(xiàn)
  • 將參數(shù)傳遞給路由
  • 生成網(wǎng)址
  • 重定向網(wǎng)址

 

路由簡(jiǎn)介

在本節(jié)中,我們將了解如何實(shí)現(xiàn)路由、如何將參數(shù)從 url 傳遞到控制器的操作、如何生成 url 以及如何重定向到特定 url。通常,路由在文件 config/routes.php 中實(shí)現(xiàn)。路由可以通過(guò)兩種方式實(shí)現(xiàn):

  • 靜態(tài)方法
  • 范圍路由構(gòu)建器

 

這是一個(gè)展示這兩種類(lèi)型的示例。

// using the scoped route builder.
router::scope('/', function ($routes) {
   $routes->connect('/', ['controller' => 'articles', 'action' => 'index']);
});
// using the static method.
router::connect('/', ['controller' => 'articles', 'action' => 'index']);

這兩個(gè)方法都會(huì)執(zhí)行 articlescontroller的index方法。出去在這兩種方法中, scoped route builder 提供了更好的性能。

 

連接路線(xiàn)

router::connect() 方法用于連接路由。以下是該方法的語(yǔ)法:

static cake\routing\router::connect($route, $defaults =[], $options =[])

router::connect() 方法有三個(gè)參數(shù):

  • 第一個(gè)參數(shù)是您要匹配的網(wǎng)址模板。
  • 第二個(gè)參數(shù)包含路由元素的默認(rèn)值。
  • 第三個(gè)參數(shù)包含路由選項(xiàng),通常包含正則表達(dá)式規(guī)則。

這里是路由的基本格式:

$routes->connect(
   'url template',
   ['default' => 'defaultvalue'],
   ['option' => 'matchingregex']
);

 

示例

在 config/routes.php 文件中進(jìn)行如下更改。

config/routes.php

use cake\http\middleware\csrfprotectionmiddleware;
use cake\routing\route\dashedroute;
use cake\routing\routebuilder;
$routes--->setrouteclass(dashedroute::class);
$routes->scope('/', function (routebuilder $builder) {
   // register scoped middleware for in scopes.
      $builder->registermiddleware('csrf', new csrfprotectionmiddleware([
      'httponly' => true,
   ]));
   $builder->applymiddleware('csrf');
   $builder->connect('/', ['controller' => 'tests', 'action' => 'show']);
   $builder->connect('/pages/*', ['controller' => 'pages', 'action' => 'display']);
   $builder->fallbacks();
});

在 src/controller/testscontroller.php 中創(chuàng)建一個(gè) testscontroller.php 文件。 將以下代碼復(fù)制到控制器文件中。

src/controller/testscontroller.php

declare(strict_types=1);
namespace app\controller;
use cake\core\configure;
use cake\http\exception\forbiddenexception;
use cake\http\exception\notfoundexception;
use cake\http\response;
use cake\view\exception\missingtemplateexception;
class testscontroller extends appcontroller {
   public function show()
   {
   }
} 

在 src/template 下創(chuàng)建一個(gè)文件夾 tests,然后在該文件夾下創(chuàng)建一個(gè)名為show.php 的 查看文件。將以下代碼復(fù)制到該文件中。

src/template/tests/show.php

this is cakephp tutorial and this is an example of connecting routes.

通過(guò)訪(fǎng)問(wèn) http://localhost/cakephp4/提供的以下 url 執(zhí)行上述示例

 

輸出

上述 url 將產(chǎn)生以下輸出。

 

傳遞的參數(shù)

傳遞的參數(shù)是在 url 中傳遞的參數(shù)。這些參數(shù)可以傳遞給控制器??的動(dòng)作。這些傳遞的參數(shù)以三種方式提供給您的控制器。

 

作為動(dòng)作方法的參數(shù)

以下示例顯示了我們?nèi)绾螌?shù)傳遞給控制器??的操作。訪(fǎng)問(wèn)以下 url:http://localhost/cakephp4/tests/value1/value2

這將匹配以下路線(xiàn)。

$builder->connect('tests/:arg1/:arg2', ['controller' => 'tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);

這里,來(lái)自 url 的 value1 將分配給 arg1,value2 將分配給 arg2、

 

作為數(shù)字索引數(shù)組

一旦將參數(shù)傳遞給控制器??的操作,您就可以使用以下語(yǔ)句獲取參數(shù)。

$args = $this->request->params[‘pass’]

傳遞給控制器??動(dòng)作的參數(shù)將存儲(chǔ)在 $args 變量中。

 

使用路由數(shù)組

參數(shù)也可以通過(guò)以下語(yǔ)句傳遞給動(dòng)作:

$routes->connect('/', ['controller' => 'tests', 'action' => 'show',5,6]);

上面的語(yǔ)句將兩個(gè)參數(shù) 5 和 6 傳遞給 testcontroller 的 show() 方法。

 

示例

在 config/routes.php 文件中進(jìn)行更改,如下面的程序所示。

config/routes.php

use cake\http\middleware\csrfprotectionmiddleware;
use cake\routing\route\dashedroute;
use cake\routing\routebuilder;
$routes--->setrouteclass(dashedroute::class);
$routes->scope('/', function (routebuilder $builder) {
// register scoped middleware for in scopes.
$builder->registermiddleware('csrf', new csrfprotectionmiddleware([
      'httponly' => true,
   ]));
   $builder->applymiddleware('csrf');
   $builder->connect('tests/:arg1/:arg2', ['controller' => 'tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);
   $builder->connect('/pages/*', ['controller' => 'pages', 'action' => 'display']);
   $builder->fallbacks();
});

在 src/controller/testscontroller.php 中創(chuàng)建一個(gè) testscontroller.php 文件。 將以下代碼復(fù)制到控制器文件中。

src/controller/testscontroller.php

declare(strict_types=1);
namespace app\controller;
use cake\core\configure;
use cake\http\exception\forbiddenexception;
use cake\http\exception\notfoundexception;
use cake\http\response;
use cake\view\exception\missingtemplateexception;
class testscontroller extends appcontroller {
public function show($arg1, $arg2) {
      $this--->set('argument1',$arg1);
      $this->set('argument2',$arg2);
   }
}

在 src/template 中創(chuàng)建一個(gè) tests 文件夾,然后在該文件夾下創(chuàng)建一個(gè)名為show.php 的 view 文件。將以下代碼復(fù)制到該文件中。

src/template/tests/show.php.

this is cakephp tutorial and this is an example of passed arguments.

echo "argument-1:".$argument1." "; echo "argument-2:".$argument2." "; ?>

通過(guò)訪(fǎng)問(wèn)以下 url http://localhost/cakephp4/tests/virat/kunal 來(lái)執(zhí)行上面的例子

 

輸出

執(zhí)行后,上述 url 將產(chǎn)生以下輸出。

 

生成網(wǎng)址

這是 cakephp 的一個(gè)很酷的特性。使用生成的 url,我們可以輕松更改應(yīng)用程序中 url 的結(jié)構(gòu),而無(wú)需修改整個(gè)代碼。

url( string|array|null $url null , boolean $full false )

上述函數(shù)將接受兩個(gè)參數(shù):

  • 第一個(gè)參數(shù)是一個(gè)數(shù)組,指定以下任何一項(xiàng)-'controller'、'action'、'plugin'。此外,您可以提供路由元素或查詢(xún)字符串參數(shù)。如果是字符串,則可以為其指定任何有效 url 字符串的名稱(chēng)。
  • 如果為 true,完整的基本 url 將被添加到結(jié)果中。默認(rèn)值為 false。

 

示例

在 config/routes.php 文件中進(jìn)行更改,如下面的程序所示。

config/routes.php

use cake\http\middleware\csrfprotectionmiddleware;
use cake\routing\route\dashedroute;
use cake\routing\routebuilder;
$routes--->setrouteclass(dashedroute::class);
$routes->scope('/', function (routebuilder $builder) {
   // register scoped middleware for in scopes.
   $builder->registermiddleware('csrf', new csrfprotectionmiddleware([
      'httponly' => true,
   ]));
   $builder->applymiddleware('csrf');
   $builder->connect('/generate',['controller'=>'generates','action'=>'show']);
   $builder->fallbacks();
});

在 src/controller/generatescontroller.php 中創(chuàng)建一個(gè) generatescontroller.php 文件。 將以下代碼復(fù)制到控制器文件中。

src/controller/generatescontroller.php

declare(strict_types=1);
namespace app\controller;
21
use cake\core\configure;
use cake\http\exception\forbiddenexception;
use cake\http\exception\notfoundexception;
use cake\http\response;
use cake\view\exception\missingtemplateexception;
class generatescontroller extends appcontroller {
   public function show()
   {
   }
} 

創(chuàng)建一個(gè)文件夾 在 src/template 生成,然后在該文件夾下創(chuàng)建一個(gè)名為 show.php 的 view 文件。將以下代碼復(fù)制到該文件中。

src/template/generates/show.php

this is cakephp tutorial and this is an example of generating urls

通過(guò)訪(fǎng)問(wèn)以下 url 執(zhí)行上述示例:

http://localhost/cakephp4/generate

 

輸出

上述 url 將產(chǎn)生以下輸出:

 

重定向路由

重定向路由很有用,當(dāng)我們要通知客戶(hù)端應(yīng)用程序此 url 已被移動(dòng)時(shí)??梢允褂靡韵潞瘮?shù)重定向 url:

static cake\routing\router::redirect($route, $url, $options =[])

上述函數(shù)的三個(gè)參數(shù)如下:

  • 描述路由模板的字符串。
  • 要重定向到的 url。
  • 將路由中的命名元素與該元素應(yīng)匹配的正則表達(dá)式相匹配的數(shù)組。

 

示例

在 config/routes.php 文件中進(jìn)行更改,如下所示。在這里,我們使用了之前創(chuàng)建的控制器。

config/routes.php

use cake\http\middleware\csrfprotectionmiddleware;
use cake\routing\route\dashedroute;
use cake\routing\routebuilder;
$routes--->setrouteclass(dashedroute::class);
$routes->scope('/', function (routebuilder $builder) {
   // register scoped middleware for in scopes.
   $builder->registermiddleware('csrf', new csrfprotectionmiddleware([
      'httponly' => true,
   ]));
   $builder->applymiddleware('csrf');
   $builder->connect('/generate',['controller'=>'generates','action'=>'show']);
   $builder->redirect('/redirect','https://lidihuo.com/');
   $builder->fallbacks();
});

通過(guò)訪(fǎng)問(wèn)以下 url 執(zhí)行上述示例。

url 1-http://localhost/cakephp4/generate

 

url 1 的輸出

url 2-http://localhost/cakephp4/redirect

 

url 2 的輸出

您將被重定向到 https://lidihuo.com

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频