2014-09-03 2 views
0

после изучения процедурного Я пытаюсь изучить ООП в PHP, а после изучения некоторой теории я пытаюсь применить ее, изучая использование рамки Laravel. Я нашел в своей книге эту часть кода для маршрутизации, но я не могу понять это в ООП.Понимание строки кода в маршрутизации Laravel

Если я не ошибаюсь, первая часть мне кажется статическим методом класса «Маршрут», но затем я нахожу вторую часть '-> где (' id ',' [0-9] + ');' что кажется динамичным и относительно экземпляра, и меня сбивает с толку.

Может кто-то, пожалуйста, помогите мне понять?

Route::get('cats/{id}', function($id){ 
return "Cat #$id"; 
})->where('id', '[0-9]+'); 
+0

Просто, 'Route :: get()' возвращает объект (возможно, экземпляр 'Route'), который имеет метод' where() '. См. Http://laravel.com/api/source-class-Illuminate.Routing.Route.html#309-323 (хотя я не могу найти 'Route :: get()' в любом месте) – Phil

+0

@Phil Я предполагаю он также спрашивает о части [0-9] +. Кажется, что-то в регулярном выражении. –

+0

спасибо @Phil это имеет смысл, но не может найти метод get(). Andrewp Нет, я знаю регулярные выражения – GabAntonelli

ответ

4

If I'm not wrong, the first part seems to me a static method of a 'Route' class, Извините, но вы ошибаетесь. Фактически Laravel обеспечивает класс Facade для каждого компонента, а здесь Route является Facade базового класса Router. Это как это Facade класса выглядит следующим образом:

<?php namespace Illuminate\Support\Facades; 

/** 
* @see \Illuminate\Routing\Router 
*/ 
class Route extends Facade { 

    /** 
    * Get the registered name of the component. 
    * 
    * @return string 
    */ 
    protected static function getFacadeAccessor() { return 'router'; } 

} 

Вы можете заметить, что он содержит только один метод и возвращает имя original/underlying класса, который содержит метод, на самом деле это key имени с помощью которого класс добавляется в контейнер IoC. Итак, Laravel за сценой, делает экземпляр этого класса Illuminate/Routing/Router.php из контейнера IoC и звонит method, это может показаться вам неясным, но это немного сложно, и здесь невозможно ответить более подробно, но вы можете посетить Laravel facade и лучше объясните это.

Таким образом, в конце концов, Laravel вызовы get() метод из Router.php класса и возвращает экземпляр класса Route/объекта и where метод Route класса, то дозвонились, используя метод цепочки (PHP-5 функцию), это все. Прочтите исходный код классов, вы получите лучшую идею.

Проверьте папку Illuminate\Support\Facades, вы можете найти столько классов фасадов, которые на самом деле являются оберткой над ее исходным классом/компонентом. Также ознакомьтесь с документом IoC container в документации Laravel, необходимо получить четкое представление о его работе с каркасом Laravel.

+2

Это очень интересный и отличный ответ. Хороший. –

+0

Спасибо за большие пальцы :-) –

Смежные вопросы