25 рд▓рд╡рд░рд╡реЗрд▓ рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕

рдПрдХ рд╕рдордп рдерд╛, рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЬрдм PHP рдФрд░ рдЙрд╕рдХреЗ рд╕рдореБрджрд╛рдп рдиреЗ рдЗрд╕рд╕реЗ рдирдлрд░рдд рдХреАред рдореБрдЦреНрдп рдордЬрд╛рдХ рдпрд╣ рдерд╛ рдХрд┐ рдкреАрдПрдЪрдкреА рдХрд┐рддрдирд╛ рднрдпрд╛рдирдХ рд╣реИред

рд╣рд╛рдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдореБрджрд╛рдп рдФрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдЕрдиреНрдп рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕реНрддрд░ рд╕реЗ рдиреАрдЪреЗ рдереЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ PHP рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЧрдВрджреЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдереАрдо рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╣рдирд╛ рдерд╛ред

рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдЪреАрдЬреЗрдВ рдмрджрд▓рдиреЗ рд▓рдЧреАрдВ - рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрддред рдЬреИрд╕реЗ рдХрд┐ рдЬрдм рдЪреБрдбрд╝реИрд▓ рдмрд░реНрддрди рдХреЛ рд╣рд┐рд▓рд╛ рд░рд╣реА рдереА, рдЕрднрд┐рдирд╡ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдХрд╣реАрдВ рд╕реЗ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдИрдВред рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдЧреАрддрдХрд╛рд░ рдереА: PHP рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ (рдЬреИрд╕реЗ рдХрд┐ рд░реВрдмреА рдХреЗ рд▓рд┐рдП рдмреБрдВрдбрд▓рд░ рдпрд╛ Node.js рдХреЗ рд▓рд┐рдП NPM)ред рдЕрддреАрдд рдореЗрдВ, PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ PEAR (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдбрд░рд╛рд╡рдирд╛ рд╕рдкрдирд╛ рдерд╛) рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдм, рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╡реЗ рдмрд╕ JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╣реИ, рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдЗрд╕рдореЗрдВ рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред

PHP рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рднреАрдбрд╝-рднрд╛рдбрд╝ рд╡рд╛рд▓реА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдЬреИрд╕реЗ рд╣реА CodeIgniter рдиреЗ рднрд╛рдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЯреЗрд▓рд░ рдУрдЯрд╡реЗрд▓ рдХрд╛ рд▓рд╛рд░рд╡реЗрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдорд╛рдЬ рдХрд╛ рдкреНрд░рд┐рдп рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЦ рд╕реЗ рдЙрднрд░рд╛ред рдРрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде, рд▓рд╛рд░рд╡реЗрд▓ рдФрд░ рдкреАрдПрдЪрдкреА рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдордЬреЗрджрд╛рд░ рдерд╛! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдврд╛рдВрдЪреЗ рдХреЗ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдиреЗ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЕрдВрдд рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрд╛ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЪреАрдЬреЗрдВ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЧрдИрдВред

рдЫрд╡рд┐

рдорд╛рдЗрдЧреНрд░реЗрд╢рди (рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг) рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд╣реЛ рдЧрдпрд╛! рдХреИрд╕реЗ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ? рдмреЗрд╢рдХ, рдПрд▓реЛрдХреНрд╡реЗрдВрдЯ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░реЗрдЧрд╛ред рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ? рдмреЗрд╢рдХ! рд░реВрдЯрд┐рдВрдЧ (рд░реВрдЯрд┐рдВрдЧ)? рд╣рд░ рддрд░рд╣ рд╕реЗ! рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП HTTP рдкрд░рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓рд╛рд░рд╡реЗрд▓ рдХрдИ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рд┐рдореНрдлрдиреА рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╡реНрдпрд╡рд╕рд╛рдп рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╣рд░ рдореМрдХрд╛ рд╣реИ рдХрд┐ рд▓рд╛рд░рд╡реЗрд▓ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ!

рдЫрд╡рд┐

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, PHP рдЬреЗрдВрдЧ рдХреЗ рдПрдХ рдЦреЗрд▓ рдХреА рддрд░рд╣ рдерд╛ - рдЧрд┐рд░рдиреЗ рд╕реЗ рдПрдХ рдШрди - рдЕрдЪрд╛рдирдХ, рд▓рд╛рд░рд╡реЗрд▓ рдФрд░ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реБрд░рдВрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдЖрдпрд╛ред рддреЛ рд╣рдо рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ, рдФрд░ рдЪрд▓реЛ рд╕рдм рдХреБрдЫ рдЦреЛрджрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИ!

1. рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдЕрдиреБрд░реЛрдз *


рд▓рд╛рд░рд╡реЗрд▓ PHP рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдПрд▓реЛрдХреЗрдВрдЯ рдСрд░реНрдбрд░ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдСрд░реНрдбрд░ рдЯреЗрдмрд▓ рд╣реИред
class Order extends Eloquent {}

, PHP. SQL. .
Order::all();

! , , . :
$orders = Order::orderBy('release_date', 'desc')->get();

, , . , , .
$order = new Order;
$order->title = 'Xbox One';
$order->save();

! Laravel, , , .

* тАФ Eloquent тАФ Active Record Laravel, .

2. ()


Laravel , . Sinatra ? Laravel ,
Route::get('orders', function()
{
    return View::make('orders.index')
        ->with('orders', Order::all());
});

API, , . , Laravel .
Route::get('orders', 'OrdersController@index');

! , Laravel ? тАФ , .

3.


, ? , . Laravel? , , Eloquent .
class Task extends Eloquent {
    public function user()
    {
        return $this->belongsTo('User');
    }
}

class User extends Eloquent {
    public function tasks()
    {
        return $this->hasMany('Task');
    }
}

! id = 1. 2 .
$user = User::find(1);
$tasks = $user->tasks;

, , , , .
$task = Task::find(1);
$user = $task->user;


4.


, . тАФ - . , .
{{ Form::model($order) }}
    <div>
        {{ Form::label('title', 'Title:') }}
        {{ Form::text('title') }}
    </div>
 
    <div>
        {{ Form::label('description', 'Description:') }}
        {{ Form::textarea('description') }}
    </div>
{{ Form::close() }}

Order, . !

5.


, , . , Laravel , .

, , .
$questions = Question::remember(60)->get();

! , , , .

6.


, . тАФ , .
, Laravel (), .
View::composer('layouts.nav', function($view)
{
    $view->with('tags', ['tag1', 'tag2']);
});

, , layouts/nav.blade.php, ( ) $tags.

7.


Laravel . , , , , Auth::attempt(). , users, .
$user = [
    'email' => 'email',
    'password' => 'password'
];
 
if (Auth::attempt($user))
{
    //  
}

, /logout URI?
Route::get('logout', function()
{
    Auth::logout();
     
    return Redirect::home();
});


8.


RESTfully Laravel ! , Route::resource() .
Route::resource('orders', 'OrdersController');

8 .



, OrdersController :

php artisan controller:make OrdersController

, , . , /orders index, /orders/create тАФ create .

, RESTful API.

9. Blade


, PHP , . , . Laravel Blade, . .blade.php, . :
@if ($orders->count())
    <ul>
        @foreach($orders as $order)
            <li>{{ $order->title }}</li>
        @endforeach
    </ul>
@endif


10.


Laravel Composer, PHPUnit тАЬ тАЭ. phpunit , .

Laravel

, 200.
public function test_home_page()
{
    $this->call('GET', '/');
    $this->assertResponseOk();
}

, , , , , .
public function test_contact_page_redirects_user_to_home_page()
{
    $postData = [
        'name' => 'Joe Example',
        'email' => 'email-address',
        'message' => 'I love your website'
    ];
 
    $this->call('POST', '/contact', $postData);
 
    $this->assertRedirectedToRoute('home', null, ['flash_message']);
}


11. тАЬ тАЭ


Laravel 4.1, 2013, Artisan, SSH . SSH :
SSH::into('production')->run([
    'cd /var/www',
    'git pull origin master'
]);

run() , Laravel ! , Artisan , php artisan command:make DeployCommand fire() .

12.


Laravel Observer, . , , illuminate.query, .

.
Event::listen('user.signUp', function()
{
    //  ,  ,
    //   
});

Laravel, , , . Laravel , IoC .
Event::listen('user.signUp', 'UserEventHandler');


13.


image

, , . , routes.php (, ).

Laravel routes, , , .
php artisan routes


14.


, . , . , , , . , .

, , ?
Queue::push('SignUpService', compact('user'));

, , , Laravel Iron.io тАЬpushтАЭ . , , . php artisan queue:subscribe, Iron.io , . .
image

15.


, Laravel ! Validator . make, Laravel .
$order = [
    'title' => 'Wii U',
    'description' => 'Game console from Nintendo'
];
 
$rules = [
    'title' => 'required',
    'description' => 'required'
];
 
$validator = Validator::make($order, $rules);
 
if ($validator->fails())
{
    var_dump($validator->messages()); // validation errors array
}



16. Tinker


image

, Laravel , . tinker .

Tinker Boris.

$ php artisan tinker

> $order = Order::find(1);
> var_dump($order->toArray());
> array(...)


17.


, . , тАЬтАЭ , , , . , , php artisan migrate, .

users, :
php artisan migrate:make create_users_table

, , . , php artisan migrate . ! ? ! php artisan migrate:rollback.

.
public function up()
{
    Schema::create('faqs', function(Blueprint $table) {
        $table->integer('id', true);
        $table->text('question');
        $table->text('answer');
        $table->timestamps();
    });
}
 
public function down()
{
    Schema::drop('faqs');
}

, drop() up(). , тАЬтАЭ . , , SQL?

18.


Laravel . , тАЬLaravel 4 GeneratorsтАЭ, . , , pivot .

. , :

php artisan generate:migration create_users_table --fields="username:string, password:string"


. .
Laravel 4 Generators Composer.

19.


, . , , .

, Laravel .
php artisan command:make MyCustomCommand

. , app/commands/MyCustomCommand.php, .
protected $name = 'command:name';
protected $description = 'Command description.';

, fire() . Artisan, app/start/artisan.php.
Artisan::add(new MyCustomCommand);

, , ! .

20.


Laravel . тАЬтАЭ , , , (Route::get(), Config::get(), ), .

тАЬ тАЭ IoC , тАЬтАЭ . :
Validator::shouldReceive('make')->once();

, shouldReceive . тАЬ тАЭ, Laravel Mockery. , , .

21.


, Laravel, , тАЬ тАЭ, . :
{{ Form::open() }}
    {{ Form::text('name') }}
    {{ Form::textarea('bio') }}
    {{ Form::selectYear('dob', date('Y') - 80, date('Y')) }}
{{ Form::close() }}

? Laravel !

22. IoC (Inverse of control)


Laravel IoC , , . , .

typehint , Laravel, PHP Reflection API, .
public function __construct(MyDependency $thing)
{
    $this->thing = $thing;
}

IoC , .
$myClass = App::make('MyClass');

, IoC . typehint , Laravel .

23.


. , тАФ ! , , . .

. dev API. .

, Laravel . bootstrap/start.php.

local , hostname .
$env = $app->detectEnvironment(array(

	'local' => array('your-machine-name'),

));

, . . , Laravel! detectEnvironment.
$env = $app->detectEnvironment(function()
{
    return getenv('ENV_NAME') ?: 'local';
});

, ( ), local.

24.


Laravel . app/config , , , . , API dev .
<?php // app/config/development/billing.php
 
return [
    'api_key' => 'your-development-mode-api-key'
];

. Config::get(тАШbilling.api_keyтАЩ) Laravel , .

25.


, Laravel , . , , Laravel.

Source: https://habr.com/ru/post/In222453/


All Articles