Completed
Push — master ( d3ac62...0cb203 )
by Federico
02:08
created

lib/Elastica/Request.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Elastica;
4
5
use Elastica\Exception\InvalidException;
6
7
/**
8
 * Elastica Request object.
9
 *
10
 * @author Nicolas Ruflin <[email protected]>
11
 */
12
class Request extends Param
13
{
14
    const HEAD = 'HEAD';
15
    const POST = 'POST';
16
    const PUT = 'PUT';
17
    const GET = 'GET';
18
    const DELETE = 'DELETE';
19
    const DEFAULT_CONTENT_TYPE = 'application/json';
20
    const NDJSON_CONTENT_TYPE = 'application/x-ndjson';
21
22
    /**
23
     * @var \Elastica\Connection
24
     */
25
    protected $_connection;
26
27
    /**
28
     * Construct.
29
     *
30
     * @param string     $path        Request path
31
     * @param string     $method      OPTIONAL Request method (use const's) (default = self::GET)
32
     * @param array      $data        OPTIONAL Data array
33
     * @param array      $query       OPTIONAL Query params
34
     * @param Connection $connection
35
     * @param string     $contentType Content-Type sent with this request
36
     *
37
     * @return \Elastica\Request OPTIONAL Connection object
0 ignored issues
show
Comprehensibility Best Practice introduced by
Adding a @return annotation to constructors is generally not recommended as a constructor does not have a meaningful return value.

Adding a @return annotation to a constructor is not recommended, since a constructor does not have a meaningful return value.

Please refer to the PHP core documentation on constructors.

Loading history...
38
     */
39
    public function __construct($path, $method = self::GET, $data = [], array $query = [], Connection $connection = null, $contentType = self::DEFAULT_CONTENT_TYPE)
40
    {
41
        $this->setPath($path);
42
        $this->setMethod($method);
43
        $this->setData($data);
44
        $this->setQuery($query);
45
46
        if ($connection) {
47
            $this->setConnection($connection);
48
        }
49
        $this->setContentType($contentType);
50
    }
51
52
    /**
53
     * Sets the request method. Use one of the for consts.
54
     *
55
     * @param string $method Request method
56
     *
57
     * @return $this
58
     */
59
    public function setMethod($method)
60
    {
61
        return $this->setParam('method', $method);
62
    }
63
64
    /**
65
     * Get request method.
66
     *
67
     * @return string Request method
68
     */
69
    public function getMethod()
70
    {
71
        return $this->getParam('method');
72
    }
73
74
    /**
75
     * Sets the request data.
76
     *
77
     * @param array $data Request data
78
     *
79
     * @return $this
80
     */
81
    public function setData($data)
82
    {
83
        return $this->setParam('data', $data);
84
    }
85
86
    /**
87
     * Return request data.
88
     *
89
     * @return array Request data
90
     */
91
    public function getData()
92
    {
93
        return $this->getParam('data');
94
    }
95
96
    /**
97
     * Sets the request path.
98
     *
99
     * @param string $path Request path
100
     *
101
     * @return $this
102
     */
103
    public function setPath($path)
104
    {
105
        return $this->setParam('path', $path);
106
    }
107
108
    /**
109
     * Return request path.
110
     *
111
     * @return string Request path
112
     */
113
    public function getPath()
114
    {
115
        return $this->getParam('path');
116
    }
117
118
    /**
119
     * Return query params.
120
     *
121
     * @return array Query params
122
     */
123
    public function getQuery()
124
    {
125
        return $this->getParam('query');
126
    }
127
128
    /**
129
     * @param array $query
130
     *
131
     * @return $this
132
     */
133
    public function setQuery(array $query = [])
134
    {
135
        return $this->setParam('query', $query);
136
    }
137
138
    /**
139
     * @param \Elastica\Connection $connection
140
     *
141
     * @return $this
142
     */
143
    public function setConnection(Connection $connection)
144
    {
145
        $this->_connection = $connection;
146
147
        return $this;
148
    }
149
150
    /**
151
     * Return Connection Object.
152
     *
153
     * @throws Exception\InvalidException If no valid connection was setted
154
     *
155
     * @return \Elastica\Connection
156
     */
157
    public function getConnection()
158
    {
159
        if (empty($this->_connection)) {
160
            throw new InvalidException('No valid connection object set');
161
        }
162
163
        return $this->_connection;
164
    }
165
166
    /**
167
     * Set the Content-Type of this request.
168
     *
169
     * @param string $contentType
170
     */
171
    public function setContentType($contentType)
172
    {
173
        return $this->setParam('contentType', $contentType);
174
    }
175
176
    /**
177
     * Get the Content-Type of this request.
178
     */
179
    public function getContentType()
180
    {
181
        return $this->getParam('contentType');
182
    }
183
184
    /**
185
     * Sends request to server.
186
     *
187
     * @return \Elastica\Response Response object
188
     */
189
    public function send()
190
    {
191
        $transport = $this->getConnection()->getTransportObject();
192
193
        // Refactor: Not full toArray needed in exec?
194
        return $transport->exec($this, $this->getConnection()->toArray());
195
    }
196
197
    /**
198
     * @return array
199
     */
200
    public function toArray()
201
    {
202
        $data = $this->getParams();
203
        if ($this->_connection) {
204
            $data['connection'] = $this->_connection->getParams();
205
        }
206
207
        return $data;
208
    }
209
210
    /**
211
     * Converts request to curl request format.
212
     *
213
     * @return string
214
     */
215
    public function toString()
216
    {
217
        return JSON::stringify($this->toArray());
218
    }
219
220
    /**
221
     * @return string
222
     */
223
    public function __toString()
224
    {
225
        return $this->toString();
226
    }
227
}
228