CakePHP 创建验证器


可以通过在控制器中添加以下代码来创建验证器:

use Cake\Validation\Validator;
$validator = new Validator();

验证数据


一旦我们创建了验证器,我们就可以使用验证器对象来验证数据,以下代码解释了我们如何验证登录网页的数据:

$validator->notEmpty('username', 'We need username.')->add(
    'username', 'validFormat', ['rule' => 'email','message' => 'E-mail must be valid']);

$validator->notEmpty('password', 'We need password.');
$errors = $validator->errors($this->request->data());

使用 $validator 对象,我们首先调用notEmpty()方法,确保用户名不能为空,之后调用add()方法验证电子邮件格式。

使用 notEmpty() 方法验证密码字段,确报密码字段不能为空。

例子


修改config/routes.php文件,如下所示:

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
    $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
        'httpOnly' => true,
    ]));
    $builder->applyMiddleware('csrf');
    // $builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
    $builder->connect('validation',['controller'=>'Valids','action'=>'index']);
    $builder->fallbacks();
});

新建src/Controller/ValidsController.php文件,并将以下代码复制到该文件中:

<?php
    namespace App\Controller;
    use App\Controller\AppController;
    use Cake\Validation\Validator;
    class ValidsController extends AppController{
        public function index(){
            $validator = new Validator();
            $validator->notEmpty('username', 'We need username.')->add(
                'username', 'validFormat', ['rule' => 'email','message' => 'E-mail must be valid']);
            $validator->notEmpty('password', 'We need password.');
            $errors = $validator->errors($this->request->getData());
            $this->set('errors',$errors);
        }
    }
?>

新建src/Template/Valids/index.php文件,并将以下代码复制到该文件中:

<?php
    if($errors) {
        foreach($errors as $error)
        foreach($error as $msg)
        echo '<font color="red">'.$msg.'</font><br>';
    } else {
        echo "No errors.";
    }
    echo $this->Form->create(NULL,array('url'=>'/validation'));
    echo $this->Form->control('username');
    echo $this->Form->control('password');
    echo $this->Form->button('Submit');
    echo $this->Form->end();
?>

访问http://localhost/cakephp4/validation执行上述示例,不输入任何内容,点击submit按钮,输出如下所示:

Click PHP

Http - 客户端


http 客户端可用于发出 GET、POST、PUT 等请求。

要使用 http 客户端,添加以下代码:

use Cake\Http\Client;

让我们通过示例来了解 HTTP 客户端的工作。

HTTP GET 方法

要从给定的 http url 中获取数据,可以执行以下操作:

$response = $http->get('https:// jsonplaceholder.typicode.com/users');

如果需要传递一些查询参数,可以按如下方式传递:

$response = $http->get('https:// jsonplaceholder.typicode.com/users', ["id", 1]);

要获得响应,可以执行以下操作:

对于普通文本数据

$response->getBody();

对于Json

$response->getJson();

对于Xml

$response->getXml()

例子

修改config/routes.php文件,如下所示:

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
    $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
        'httpOnly' => true,
    ]));
    $builder->applyMiddleware('csrf');
    // $builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
    $builder->connect('getData',['controller'=>'Requests','action'=>'index']);
    $builder->fallbacks();
});

新建src/Controller/RequestsController.php文件,并将以下代码复制到该文件中:

<?php
    namespace App\Controller;
    use App\Controller\AppController;
    use Cake\Http\Client;
    class RequestsController extends AppController{
        public function index(){
            $http = new Client();
            $response = $http->get('https:// jsonplaceholder.typicode.com/users');
            $stream = $response->getJson();
            $this->set('response',$stream);
        }
    }
?>

新建src/Template/Requests/index.php文件,并将以下代码复制到该文件中:

<h3>All Users from url : https:// jsonplaceholder.typicode.com/users<?php
    if($response) {
        foreach($response as $res => $val) {
            echo '<font color="gray">Name: '.$val["name"].' Email -'.$val["email"].'</font><br>';
        }
    }
?>

访问http://localhost/cakephp4/getData执行上述示例,不输入任何内容,点击submit按钮,输出如下所示:

Users URL

HTTP POST 方法

要使用 post,你需要调用 $http 客户端,如下所示:

$response = $http->post('yoururl', data);

例子

修改config/routes.php文件,如下所示:

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
    $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
        'httpOnly' => true,
    ]));
    $builder->applyMiddleware('csrf');
    // $builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
    $builder->connect('postData',['controller'=>'Requests','action'=>'index']);
    $builder->fallbacks();
});

新建src/Controller/RequestsController.php文件,并将以下代码复制到该文件中:

<?php
    namespace App\Controller;
    use App\Controller\AppController;
    use Cake\Http\Client;
    class RequestsController extends AppController{
        public function index(){
            $http = new Client();
            $response = $http->post('https:// postman-echo.com/post', [
                'name'=> 'ABC',
                'email' => 'xyz@gmail.com'
            ]);
        }
    }
?>

创建目录Requestsat源代码/模板并在该目录下创建一个View名为 index.php 的文件。将以下代码复制到该文件中。

新建src/Template/Requests/index.php文件,并将以下代码复制到该文件中:

<h3>Testing Post Method</h3>

访问http://localhost/cakephp4/postData执行上述示例,输出如下所示:

Post Method

同样,你可以尝试使用 PUT 方法:

$http = new Client();
$response = $http->put('https:// postman-echo.com/post', [
    'name'=> 'ABC',
    'email' => 'xyz@gmail.com'
]);