Существуют ли какие-либо другие шаги, необходимые для расширения класса в Laravel 3?
Я создал application/libraries/response.php
:
class Response extends Laravel\Response { public static function json($data, $status = 200, $headers = array(), $json_options = 0) { $headers['Content-Type'] = 'application/json; charset=utf-8'; if(isset($data['error'])) { $status = 400; } dd($data); return new static(json_encode($data, $json_options), $status, $headers); } public static function my_test() { return var_dump('expression'); } }
Но по какой-то причине не my_test()
ни my_test()
, ни модифицированная функция json()
.
В моем контроллере я делаю следующее:
Response::my_test(); // or $response['error']['type'] = 'existing_user'; Response::json($response);
И никто не работает, чего мне не хватает?
Вы должны сначала добавить пространство имен – вот так:
файл: application/libraries/extended/response.php
<?php namespace Extended; class Response extends \Laravel\Response { public static function json($data, $status = 200, $headers = array(), $json_options = 0) { $headers['Content-Type'] = 'application/json; charset=utf-8'; if(isset($data['error'])) { $status = 400; } dd($data); return new static(json_encode($data, $json_options), $status, $headers); } public static function my_test() { return var_dump('expression'); } }
Затем внутри config / application.php вам нужно изменить псевдоним
'Response' => 'Extended\\Response',
Затем в start.php
Autoloader::map(array( 'Extended\\Response' => APP_PATH.'libraries/extended/response.php', ));
Фактически, надлежащим способом расширения библиотеки было бы следующее:
response.php
в application/libraries/
class Response extends \Laravel\Response
'Response' => 'Laravel\\Response'
в application/config/application.php
Протестировано и работает. Вот как я это делаю сейчас